Python子进程使用import子进程

时间:2010-12-06 07:18:21

标签: python subprocess

这可以以某种方式克服吗?子进程可以创建子进程吗?

问题是,我有一个现成的应用程序需要调用Python脚本。这个脚本本身可以很好地工作,但它需要调用现有的shell脚本。

示意图问题在以下代码中:

parent.py

import subprocess
subprocess.call(['/usr/sfw/bin/python', '/usr/apps/openet/bmsystest/relAuto/variousSW/child.py','1', '2'])

child.py

import sys
import subprocess
print sys.argv[0]
print sys.argv[1]

subprocess.call(['ls -l'], shell=True)
exit

正在运行child.py

python child.py 1 2
  all is ok

正在运行parent.py

python  parent.py
Traceback (most recent call last):
  File "/usr/apps/openet/bmsystest/relAuto/variousSW/child.py", line 2, in ?
    import subprocess
ImportError: No module named subprocess

3 个答案:

答案 0 :(得分:1)

  

应该没有什么能阻止你在child.py和parent.py

中使用子进程

我能够完美地运行它。 :)

发布调试

  

您正在使用python/usr/sfw/bin/python

  1. 裸蟒是否指向同一个python?
  2. 您可以输入'which python'来查看吗?
  3. 我相信如果您执行以下操作,它将适用于您。

    /usr/sfw/bin/python parent.py
    

    或者,您可以将parent.py code更改为

    吗?
    import subprocess
    subprocess.call(['python', '/usr/apps/openet/bmsystest/relAuto/variousSW/child.py','1', '2'])
    

答案 1 :(得分:0)

使用subprocess.call不是正确的方法。在我看来,subprocess.Popen会更好。

parent.py:

1 import subprocess
2 
3 process = subprocess.Popen(['python', './child.py', 'arg1', 'arg2'],\
4         stdin=subprocess.PIPE, stdout=subprocess.PIPE,\
5         stderr=subprocess.PIPE)
6 process.wait()
7 print process.stdout.read()

child.py

1 import subprocess
2 import sys
3 
4 print sys.argv[1:]
5 
6 process = subprocess.Popen(['ls', '-a'], stdout = subprocess.PIPE)
7 
8 process.wait()
9 print process.stdout.read()

超出计划:

python parent.py 
['arg1', 'arg2']
.
..
chid.py
child.py
.child.py.swp
parent.py
.ropeproject

答案 2 :(得分:0)

您可以尝试将您的python目录添加到chield.py

中的sys.path
import sys
sys.path.append('../')

是的,这是不好的方式,但它可以帮助你。