我写过以下2个程序,
# TempHello.py
def sayHello():
print 'Hello World !'
sayHello()
# Subprocess.py
import subprocess
if __name__ == '__main__':
print 'Calling other program'
child = subprocess.Popen( "./TempHello.py" , shell=True)
print subprocess.check_output()
print 'Calling other program completed'
当我尝试运行Subprocess.py程序时,它会产生以下错误,
Calling other program
./TempHello.py: 2: ./TempHello.py: Syntax error: "(" unexpected
Traceback (most recent call last):
File "/usr/mandar/AnuntaTech/eclipse_workspace/BackupManager/Subprocess.py", line 7, in <module>
print subprocess.check_output()
File "/usr/lib/python2.7/subprocess.py", line 537, in check_output
process = Popen(stdout=PIPE, *popenargs, **kwargs)
TypeError: __init__() takes at least 2 arguments (2 given)
我无法弄清楚如何解决这个问题。请帮忙。
答案 0 :(得分:3)
问题是Popen
正在尝试执行TempHello.py
,就好像它是一个shell可执行文件,而实际上它是一个Python脚本。最简单的解决方案是修复Subprocess.py
,如下所示:
import subprocess
if __name__ == '__main__':
print 'Calling other program'
child = subprocess.Popen( "python TempHello.py" , shell=True)
print subprocess.check_output()
print 'Calling other program completed'
实际上,您需要调用Python可执行文件并使其运行您的脚本。
在* nix平台上(因此,不包括Windows),您还可以使用shebang指定要使用的解释器,如下所示:
#! /usr/bin/env python
def sayHello():
print 'Hello World !'
sayHello()
或者
#! /usr/bin/python
def sayHello():
print 'Hello World !'
sayHello()
并使用chmod u+x TempHello.py
使脚本可执行。
顺便说一句,我建议你采用不同的方法来生成Python脚本,如果这是你的目的:看一下multiprocess
模块。
答案 1 :(得分:2)
您正在运行TempHello.py作为程序。但它只是python源代码。 如何将这一行放在开头:
#!/usr/bin/env python
并运行
chmod u+x TempHello.py
在运行Subprocess.py
之前