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,但他/她不能认为这个解决方案是跨平台的。谢谢您的友好评论。但是我猜问题的症结是在简单的答案中解决的。