这是我的代码的外观,我在使用popen
时会遇到错误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:Python27test1.py')
test1.py
def test1(parm1,parm2):
print 'test1',parm1
if __name__ = '__main__':
test1(parm1='',parm2='')
错误
语法错误
in test1.py:
您需要两个相等的标志:
if __name__ = '__main__':
使用
if __name__ == '__main__':
由于您想将__name__
的值与字符串'__main__'
进行比较,而不是为__name__
分配值。
在test.py中:
parm1='test'
是语法。您不能将值分配给列表中间的变量:
p=subprocess.Popen([sys.executable,jobname,parm1='test',parm2='test1'])
看来,您想将parm1
和parm2
的不同值馈送到函数test1.test1
中。您无法通过调用python test1.py
来做到这一点,因为那里的parm1=''
和parm2=''
在那里进行了硬编码。
当您想从Python运行非Python脚本时,请使用subprocess
。但是,当您想在子过程中运行Python功能时,请使用多处理:
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')