2011-05-16 248 views
0

我希望運行一個python腳本,該腳本從另一個python腳本獲取選項和參數。從另一個腳本運行python腳本

For example run C:\\code\\old_start_training_generic_depth.py -i 10 -l 2 from 
C:\\code\\start.py 

回答

1

C:\代碼\ start.py:

import subprocess 
subprocess.Popen(["python", r"C:\code\old_start_training_generic_depth.py", "-i", "10", "-l", "2"]) 
+1

儘管爲了應付系統中安裝的多個Python版本,通常使用'sys.executable'而不是使用硬編碼'「python」''更好。 – ncoghlan 2011-05-16 11:44:08

6

你可以做,使用subprocess.Popen,可用於從您的Python代碼運行任何外部程序(包括其他的Python程序)。

這就是說,我會這樣做,否則。由於這兩個程序都是用Python編寫的,因此我會將要調用的程序打包爲可通過編程方式調用(即導入並調用)的模塊,而不是將其稱爲子進程。這可能會帶來一些小的開發成本,但最終我相信它會爲自己付出代價,因爲這種方法有很多優點。

+2

+1給了所需要的答案,以及這是問的人。 – Johnsyweb 2011-05-16 09:49:06

3
import subprocess 
subprocess.Popen(['C:\\code\\old_start_training_generic_depth.py', '-i', '10', '-l', '2']).wait() 
+0

你不只是'溝通()'並扔掉結果。 – 2011-05-16 09:48:17

-1
# once upon a time somewhere in the start.py 
os.system("python C:\\code\\old_start_training_generic_depth.py -i 10 -l 2") 
+0

不! os.system不是正確的做法。 [os.system](http://docs.python.org/library/os.html#os.system) – 2011-05-16 09:45:16

+0

'os.system'可以很好地工作。我猜@Jakob的意思是'subprocess.Popen'是一個更好的選擇。 – Thomas 2011-05-16 09:53:28

+0

如果你不需要傳遞輸入/ catch輸出,我沒有看到os.system有什麼問題。 – Klark 2011-05-16 09:53:33

2
import subprocess 

def runscript(): 
    ''' 
    Run a script 
    ''' 

    cmd_list = ["python", r"C:\code\old_start_training_generic_depth.py", \ 
       "-i", "10", "-l", "2"] 

    pipe = subprocess.Popen(cmd_list, stdin=subprocess.PIPE, \ 
        stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 

    stdout, stderr = pipe.communicate() 
    retcode = pipe.poll() 

    return (retcode, stdout, stderr) 
相關問題