2013-10-03 50 views
0

來處理我有一個命令(說富),我通常從終端上運行,像這樣:輸入使用Python

[email protected]$ foo 
    enter the string: *(here I enter some string)* 
    RESULT OF THE COMMAND WITH THE GIVEN INPUT 

我事先知道我需要給什麼樣的輸入。那麼,如何使用此Python代碼自動執行呼叫:

from subprocess import call 
    call(['foo']) 

如何自動輸入到foo?

+0

'調用([輸入( '輸入字符串')]) '在Python 3.x或'call([raw_input()])'Python 2.x – karthikr

+0

這裏沒有提及foo。我如何稱呼它? – tdk

+0

@ user1928721不要在上面的註釋中使用該方法。這不是你想要的。 – SethMMorton

回答

0

使用Popencommunicate

from subprocess import Popen, PIPE 

process = Popen('foo', stdout=PIPE, stderr=PIPE) 

(stdout, stderr) = process.communicate("YOUR INPUT HERE") 

print stdout 
+0

這似乎並不奏效。我仍然得到提示,現在代碼的其餘部分,即與命令輸入的結果似乎不起作用 – tdk

+0

@ user1928721「看起來不起作用」*請*更具體。這就像去看醫生,說「我受傷了」,並期待他們診斷你。準確地說明什麼不起作用。你看到了什麼輸出?你會得到什麼樣的行爲?你能指望什麼? – SethMMorton

+0

我最真誠的道歉。我是全新的Python和Linux編程新手。 我得到一個提示輸入(即「輸入字符串:」),這是超過一分鐘,所以我假設自動輸入沒有發生並手動輸入輸入。其餘的代碼似乎根本沒有運行(即光標在那裏站立了10分鐘,並且我終止了該進程,因爲它通常會在幾秒鐘內給出結果(「命令的結果與給定的輸入」) – tdk

1

您可以檢查出第三方pexpect模塊(Here is the API):

import pexpect 
child = pexpect.spawn('foo') 
child.expect('enter the string:') 
child.sendline('STRING YOU KNOW TO ENTER') 
child.close() # End Communication