2012-10-22 85 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