Python 调用子进程时出错
我写了以下两个程序Python 调用子进程时出错,python,python-2.7,Python,Python 2.7,我写了以下两个程序 # 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 subp
# 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)
调用其他程序
./TempHello.py:2:./TempHello.py:语法错误:(“意外
回溯(最近一次呼叫最后一次):
文件“/usr/mandar/AnuntaTech/eclipse_workspace/BackupManager/Subprocess.py”,第7行,在
打印子流程。检查输出()
文件“/usr/lib/python2.7/subprocess.py”,第537行,在check_输出中
进程=Popen(stdout=PIPE,*popenargs,**kwargs)
TypeError:\uuuu init\uuuu()至少接受2个参数(给定2个)
我不知道如何解决这个问题。请帮助。问题是,
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'
#! /usr/bin/env python
def sayHello():
print 'Hello World !'
sayHello()
实际上,您需要调用Python可执行文件并使其运行您的脚本
在*nix平台上(因此,不包括Windows),您还可以使用shebang指定要使用的解释器,如下所示:
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'
#! /usr/bin/env python
def sayHello():
print 'Hello World !'
sayHello()
或
并使用chmod u+x TempHello.py
使脚本可执行
顺便说一句,我建议您在生成Python脚本时采取不同的方法,如果这是您的目的的话:看看
多进程模块。问题是Popen
试图执行TempHello.py
,就好像它是一个shell可执行文件,而实际上它是一个Python脚本on正在修复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'
#! /usr/bin/env python
def sayHello():
print 'Hello World !'
sayHello()
实际上,您需要调用Python可执行文件并使其运行您的脚本
在*nix平台上(因此,不包括Windows),您还可以使用shebang指定要使用的解释器,如下所示:
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'
#! /usr/bin/env python
def sayHello():
print 'Hello World !'
sayHello()
或
并使用chmod u+x TempHello.py
使脚本可执行
顺便说一句,我建议您在生成Python脚本时采用不同的方法,如果这是您的目的的话:看看多进程模块。您正在运行TempHello.py作为一个程序。但它只是Python源代码。
把这句话放在开头怎么样
#!/usr/bin/env python
跑
chmod u+x TempHello.py
在运行Subprocess.py之前,您正在以程序的形式运行TempHello.py,但它只是python源代码。
把这句话放在开头怎么样
#!/usr/bin/env python
跑
chmod u+x TempHello.py
在运行Subprocess.py之前是TempHello.py
可执行文件吗?您不也需要一个吗?非常感谢@JoachimPileborg,我这边的愚蠢错误。非常感谢。还调用Subprocess.Popen('python./TempHello.py'))对我来说也一样。是不是TempHello.py
可执行文件?你不也需要一个吗?非常感谢@JoachimPileborg,我这边的愚蠢错误。非常感谢。还调用subprocess.Popen('python./TempHello.py'))这个解决方案需要一个类似UNIX的平台,它不会在Windows等上运行。显然,OP正在使用Linux,但是他/她不能认为这个解决方案是跨平台的。谢谢你的友好评论。但是我猜问题的症结是在简单的答案中解决的。解决方案需要一个类似UNIX的平台,它不会在Windows等上运行。显然,OP正在使用Linux,但他/她不能认为这个解决方案是跨平台的。谢谢您的友好评论。但是我猜问题的症结是在简单的答案中解决的。