确定如果将python脚本作为子进程调用并传递args

时间:2017-10-26 20:48:04

标签: python subprocess

我有一个脚本,可以选择在完成后运行第二个脚本。我想知道是否有一个好方法让第二个脚本知道它是自己运行还是作为子进程运行。如果它被称为子进程,则将args传递给第二个脚本。

第一个脚本的结尾如下:

dlg = wx.MessageDialog(None, "Shall we format?",'Format Files',wx.YES_NO | wx.ICON_QUESTION)
result = dlg.ShowModal()

if result == wx.ID_YES:
    call("Threading.py", shell=True) 
else:
    pass

第二个脚本是一个独立的脚本,它接收3个文件并将它们格式化为一个文件。 args只会在第二个脚本中设置文件名。

1 个答案:

答案 0 :(得分:1)

因此,我将使用os.getppid()检索父进程pid,然后使用Popen将其作为参数传递给子进程:

(parent.py)

#!/usr/bin/env python

import sys
import os

from subprocess import Popen, PIPE
output = Popen(['./child.py', str( os.getppid() )], stdout=PIPE)
print output.stdout.read()

(child.py)

#!/usr/bin/env python

import sys
import os

parent_pid = sys.argv[1]
my_pid = str(os.getppid())

print "Parent is %s child is %s " % ( parent_pid, my_pid )

所以当你从父母那里打电话给孩子时

$ ./parent.py 
Parent is 72297 child is 72346

此时很容易进行比较并检查pid。