簡體   English   中英

Python子進程使用import子進程

[英]Python subprocess using import 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

應該沒有什么能阻止你在child.py和parent.py中使用子進程

我能夠很好地運行它。 :)

問題調試

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

  1. 裸蟒是指向同一個蟒蛇?
  2. 你可以輸入'which python'來檢查嗎?

我相信如果你做了以下,它將適合你。

/usr/sfw/bin/python parent.py

或者,您可以將parent.py code更改為

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

您可以嘗試將您的python目錄添加到chield.py中的sys.path

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

是的,這是不好的方式,但它可以幫助你。

使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM