2012-10-15 67 views
0

我有一個python腳本,它會給出一個輸出文件。我需要將這個輸出文件提供給一個命令行程序。有沒有什麼辦法可以調用命令行程序並控制它在python中處理文件?如何從python運行和控制命令行程序?

我試圖運行此代碼

import os 
import subprocess 
import sys 

proc = subprocess.Popen(["program.exe"], stdin=subprocess.PIPE) 
proc.communicate(input=sys.argv[1]) #here the filename should be entered 
proc.communicate(input=sys.argv[2]) #choice 1 
proc.communicate(input=sys.argv[3]) #choice 2 

有什麼辦法,我可以進入輸入來自命令行來。而且,儘管我運行代碼後cmd程序打開界面閃爍。

謝謝。

注:平臺是Windows

回答

1

看一看http://docs.python.org/library/subprocess.html。這是當前啓動外部程序的最新方式。有很多例子,你必須檢查自己最適合你的需求。

+0

>>> import shlex,subprocess >>> command_line = raw_input() /bin/vikings -input eggs.txt -output「spam spam.txt」-cmd「echo'$ MONEY'」 >>> args = shlex.split(command_line) >>> print args ['/ bin/vikings','-input','eggs.txt',' - output','spam spam。txt','-cmd','echo'$ MONEY'「] >>> p = subprocess.Popen(args)#成功! -------這將適用於如果我使用Windows ...我不熟悉上面的代碼雖然從我在Windows中使用 – user1717522

+0

未格式化的代碼很難閱讀,但它看起來不錯。 – Achim

0

你可以做os.system(somestr)它允許你在命令行上執行semestr作爲命令。然而,由於不安全等原因,我們一直在仔細研究這個問題(等我找到它後立即發佈鏈接)。

其結果是,它一直以來與subprocess.popen

希望更換這有助於

0

取決於你有多少控制需要,你可能會發現它更容易使用pexpect這使得解析程序的輸出相當容易,也可以很容易地用於與程序stdin交談。看看網站,他們有一些很好的例子。

0

如果你的目標程序預計在STDIN輸入,您可以使用pipe重定向:

python myfile.py | someprogram 
0

正如我剛纔已經回答another question對於子,有一個更好的選擇!

請看看偉大的圖書館python sh,它是一個全面的Python子程序接口,允許您調用任何程序,就像它是一個函數一樣,更重要的是,它是令人愉快的pythonic。

+0

謝謝,我會檢查它 – user1717522

0

除了用管道重定向數據流,也可以處理一個命令行如:

mycode.py -o outputfile inputfilename.txt 

您必須導入SYS

import sys 

,並在你的主要功能:

ii=1 
infile=None 
outfile=None 
# let's process the command line 
while ii < len(sys.argv): 
arg = sys.argv[ii] 
     if arg == '-o': 
      ii = ii +1 
      outfile = sys.argv[ii] 
else: 
      infile=arg 
     ii = ii +1 

當然,你可以添加一些文件檢查等...