0

我写了以下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)

我无法弄清楚如何解决这个问题。请帮忙。

4

2 回答 2

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 脚本时采取不同的方法,如果这是你的目的:看看multiprocessmodule.

于 2013-09-23T07:52:02.000 回答
2

您正在将 TempHello.py 作为程序运行。但这只是python源代码。把这条线放在开头怎么样:

#!/usr/bin/env python

并运行

chmod u+x TempHello.py

在运行 Subprocess.py 之前

于 2013-09-23T07:53:50.820 回答