Reputation: 121
Can this be somehow overcome? Can a child process create a subprocess?
The problem is, I have a ready application which needs to call a Python script. This script on its own works perfectly, but it needs to call existing shell scripts.
Schematically the problem is in the following code:
import subprocess
subprocess.call(['/usr/sfw/bin/python', '/usr/apps/openet/bmsystest/relAuto/variousSW/child.py','1', '2'])
import sys
import subprocess
print sys.argv[0]
print sys.argv[1]
subprocess.call(['ls -l'], shell=True)
exit
python child.py 1 2
all is ok
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
Upvotes: 10
Views: 56026
Reputation: 266
Using subprocess.call
is not the proper way to do it. In my view, subprocess.Popen
would be better.
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()
Out of program:
python parent.py
['arg1', 'arg2']
.
..
chid.py
child.py
.child.py.swp
parent.py
.ropeproject
Upvotes: 0
Reputation: 3919
You can try to add your python directory to sys.path in chield.py
import sys
sys.path.append('../')
Yes, it's bad way, but it can help you.
Upvotes: 0
Reputation: 66739
There should be nothing stopping you from using subprocess in both child.py and parent.py
I am able to run it perfectly fine. :)
Issue Debugging:
You are using
python
and/usr/sfw/bin/python
.
I am sure if you did the following, it will work for you.
/usr/sfw/bin/python parent.py
Alternatively, Can you change your parent.py code
to
import subprocess
subprocess.call(['python', '/usr/apps/openet/bmsystest/relAuto/variousSW/child.py','1', '2'])
Upvotes: 2