为什么subprocess.Popen在service / init.d下运行时无法工作?

时间:2012-09-13 11:29:52

标签: python service subprocess

我将这些代码放在“code.py”文件中

param_list = ['/usr/bin/someapp.bin','-q','/usr/bin/someparam.conf','/tmp/output.pdf']
p = subprocess.Popen( param_list , shell=False, stdout=subprocess.PIPE )
p.communicate()

someapp.bin将生成一个文件并输出为/tmp/output.pdf 当我在终端shell下的code.py下运行时,它工作, 用户是: ubuntu

但是当我尝试使用用户将其作为服务运行时: service_user 并确保/ tmp文件夹是可写的,任何人都可以访问。

我的问题是为什么它不能生成,因为它假设是在 服务,我的嫌疑人是许可问题,但我无法得到它 工作,需要一些建议和帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

代码应该有效。要追查问题:

  1. print(os.getuid())添加到代码中,以确保它以您期望的UID启动
  2. 启用someapp.bin的日志记录/调试以查看是否存在错误
  3. 检查退出代码
  4. 将命令的输出打印到控制台,以便查看任何错误:

    output = p.communicate()[0]
    print(output)