It is easier for you to pass the parameter "$1" to the internal
command python3
.
If you don't want to do that, you can still get the external
command line parameter with the trick of /proc
, for example:
$ cat parent.sh
#!/usr/bin/bash
python3 child.py
$ cat child.py
import os
ext = os.popen("cat /proc/" + str(os.getppid()) + "/cmdline").read()
print(ext.split('')[2:-1])
$ ./parent.sh aaaa bbbb
['aaaa', 'bbbb']
Note:
- the shebang line in
parent.sh
is important, or you should execute ./parent.sh
with bash
, else you will get no command line param in ps
or /proc/$PPID/cmdline
.
- For the reason of
[2:-1]
: ext.split('') = ['bash', './parent.sh', 'aaaa', 'bbbb', '']
, real parameter of ./parent.sh
begins at 2, ends at -1.
Update: Thanks to the command of @cdarke that "/proc
is not portable", I am not sure if this way of getting command line works more portable:
$ cat child.py
import os
ext = os.popen("ps " + str(os.getppid()) + " | awk ' { out = ""; for(i = 6; i <= NF; i++) out = out$i" " } END { print out } ' ").read()
print(ext.split(" ")[1 : -1])
which still have the same output.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…