2011-03-25 44 views
2

我寫了一個Python包裝(pyprog)來運行程序(someprogram),像這樣:如何使Python程序處理here文檔?

...do some setup stuff in Python... 
print("run [y=yes]") 
CHOICE=input() 
...do some setup stuff in Python... 
if CHOICE == "y": 
    status=subprocess.call(["someprogram"]) 
    sys.exit(status) 

用戶想要使用一個shell腳本來運行程序,並使用在這裏給它輸入文件是這樣的:

#!/bin/sh 
pyprog > pyprog.log << EOF 
y 
file1 
file2 
EOF 

有沒有辦法產卵子,使得這裏的文件就可以了(在「Y」被由Python輸入()消耗,以及「文件1」和「文件2」繼續作爲一些程序的標準輸入)?現在,Python輸入()採用「y」,但其餘部分消失。

+0

這裏「工作」是什麼意思?什麼不適用於您當前的解決方案? – 2011-03-25 17:18:54

+0

你是否試圖將這裏的文件傳遞給子進程? – dfb 2011-03-25 17:19:42

+0

是的,我試圖將這裏的文檔傳遞給子進程。現在,整個事情終止,因爲「someprogram」沒有得到輸入「file1」和「file2」。 – lik 2011-03-25 17:53:34

回答

4

您需要將sys.stdin連接到該呼叫的stdin

status=subprocess.call(["someprogram"], stdin=sys.stdin) 
1
import sys 
status=subprocess.call(["someprogram"], stdin=sys.stdin) 
0

我以前用過這樣的事情了幾次:https://gist.github.com/887225

基本上它的接受一些命令行參數的Python腳本,執行基於什麼是輸入一些改造,然後使用os.system()來喚起一個shell命令。 在這個例子中,我調用Java,傳遞一個類路徑,然後運行ProgramName.jar程序。