我對Python非常新,我現在被某些東西卡住了。我正在使用Python 2.7。 我正試圖自動化一個我編寫python腳本的shell命令。我必須輸入一個整數值給我使用Popen.communicate(輸入='2')的shell。儘管輸入已通過,但它作爲字符串傳遞,子進程需要它作爲數值。當嘗試將其傳遞作爲像Popen.communicate一個數字小值(輸入= 2)它引發以下錯誤:Popen.communicate通過整數輸入參數
TypeError: 'int' object has no attribute '__getitem__'
所以有任何方法來發送輸入作爲數字值Δα
這裏是我使用的代碼:
import sys
from subprocess import Popen, PIPE, STDOUT
cmd = ["sudo", "./sbt", "project java-examples", "run"]
proc = Popen(cmd, bufsize=4096, shell=False, stdout=PIPE, stdin=PIPE, stderr=STDOUT)
string = proc.communicate(input='2')
print string[0]
proc.stdin.close()
編輯: 對不起,我沒有在第一位置提到了這一點。 我的Java應用程序有多個主類,因此編譯器會詢問要執行哪個類,並且每次都需要輸入相同的數字,這就是爲什麼我要將它自動化的原因。當我傳遞一個字符串值時,它會拋出numberformatexception。
https://docs.python.org/2/library/subprocess.html#subprocess.Popen.communicate - *「可選的輸入參數應該是一個字符串發送到子進程」*,因此不是它的不可能。這很好,因爲管道是texty,而不是Python對象,所以它需要「數字」值2而不是字符串「2」是沒有意義的。那是什麼意思?當你通過'input ='2''時會發生什麼? – TessellatingHeckler
@TessellatingHeckler子流程需要一個數字輸入,而不是一個字符串輸入,所以當我傳遞一個字符串值時,它會拋出一個「無效數字:java.lang.NumberFormatException:對於輸入字符串:」「」。並且更改子進程的輸入類型不是一個選項,因爲它是由shell本身而不是子進程提示的。 – aladeen