2012-10-22 116 views
0

這是我的代碼的外觀和我得到一個錯誤,而使用POPENPOPEN執行錯誤

test.py

import subprocess 
import sys 

def test(jobname): 
    print jobname 
    p=subprocess.Popen([sys.executable,jobname,parm1='test',parm2='test1']) 


if __name__ == "__main__": 
    test(r'C:\Python27\test1.py') 

test1.py

def test1(parm1,parm2): 
    print 'test1',parm1 

if __name__ = '__main__': 
    test1(parm1='',parm2='') 

錯誤

語法錯誤

回答

4

在test1.py:

您需要在兩個等號:

if __name__ = '__main__': 

改用

if __name__ == '__main__': 

,因爲你要的__name__值以字符串'__main__'比較,不分配值爲__name__


在test.py:

parm1='test'是一個SyntaxError。你不能在列表中的中間值賦給變量:

p=subprocess.Popen([sys.executable,jobname,parm1='test',parm2='test1']) 

看來要爲parm1parm2送不同值代入函數test1.test1。你不能通過調用python test1.py來做到這一點,因爲parm1=''parm2=''在那裏是硬編碼的。

當您想從Python運行非Python腳本時,請使用subprocess。但是,當你想在子進程運行Python功能,使用multiprocessing

import multiprocessing as mp 
import test1 

def test(function, *args, **kwargs): 
    print(function.__name__) 
    proc = mp.Process(target = function, args = args, kwargs = kwargs) 
    proc.start() 
    proc.join() # wait for proc to end 

if __name__ == '__main__': 
    test(test1.test1, parm1 = 'test', parm2 = 'test1') 
+0

這也許應該是'POPEN([sys.executable,作業名, '測試', 'TEST1'])'。 test1.py需要使用'sys.argv'。 – eryksun

+0

@eryksun:謝謝;你是絕對正確的。在那種情況下,我認爲test.py中的多處理比改變test1.py更清潔。編輯... – unutbu