如何在Linux中了解C / C ++中的被调用程序路径?

时间:2016-06-26 14:04:12

标签: python c++ c

我在/ usr / bin中有一个已编译的C程序说 test ,而python程序说 pgm.py < / strong>在/ opt / python /中。在 pgm.py 中,我正在调用类似os.system的C程序(&#34;测试arg1 arg2&#34;)。 C程序是否可以知道/opt/python/pgm.py正在调用它?

2 个答案:

答案 0 :(得分:0)

Misc operating system interfaces将获得您想要的信息。 一种方法是让python程序将信息写入临时文件, 然后将该文件作为c-line arg传递给C程序。

答案 1 :(得分:0)

假设您使用类似于Linux的东西,您可以使用特定于平台的解决方案。为简单起见,我使用Python脚本test.py代替二进制文件。

<强> pgm.py

#!/usr/bin/env python
import os

os.system('python test.py')

<强> test.py

#!/usr/bin/env python
import os, errno

pid = os.getpid()

while 1:
    try:
        pid = int(open('/proc/%d/stat' % pid).read().split()[3])
        cmd = os.readlink('/proc/%d/exe' % pid)
        args = open('/proc/%d/cmdline' % pid).read().split('\0')
    except OSError as e:
        if e.errno == errno.EACCES:
            print 'Permission denied for PID=%d' % pid
            break
        raise
    print pid, cmd, args
    if pid == 1:
        break

运行pgm.py时,我得到输出......

341 /bin/dash ['sh', '-c', 'python test.py', '']
340 /usr/bin/python2.7 ['python', './pgm.py', '']
13888 /bin/bash ['-bash', '']
Permission denied for PID=13887

所以你可以在test中测试使用类似的简单比较。