簡體   English   中英

根據stdout的輸出和python子進程的輸出使用stdin的設置輸入

[英]Using set input for stdin based on output from stdout with python subprocess

我想使用subprocess.Popen從python自動安裝軟件。 在安裝過程中,此軟件輸出一些信息,然后詢問用戶幾個問題(例如,是否同意軟件許可或安裝軟件)。 對於這些問題,我想從pythong代碼中自動回答。 但是,我嘗試了幾種方法,但沒有一種對我有用。 關於如何制作的任何想法? 預期的偽代碼如下(肯定是,此代碼不起作用)。

p = subprocess.Popen(['myprogram'], stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.STDOUT))

while (p.poll() == None):
  line = p.stdout.readline()
  if not line: 
    break
  else:
    print line.strip()
    if line == 'Do you accept license agreement (YES/NO)':
      p.stdin.write('YES/n')
    elif line == 'Do you want to install this software (YES/NO)':
      p.stdin.write('YES/n')

謝謝托馬斯·芬茨。 pypi.python.org/pypi/pexpect在這種情況下非常出色。 在我之前的評論中,我說這沒有用,因為我在模式規范中犯了一個錯誤。 特別是,我使用了p.expect('您接受許可協議嗎?(是/否)')。 在這種情況下,問號是一個錯誤。 由於它是一個元字符,因此無法匹配該模式,因此發生了超時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM