-1

我正在尝试使用 python 的 subprocess 模块运行一个 php 脚本。

proc = subprocess.Popen(['php', '-f', test.php], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

retCode = proc.wait

print retCode

val = float(kprocess.stdout.read())

return val

我也试过:

proc = subprocess.Popen(['php', '-f', test.php], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

val = float(kprocess.communicate()[0])

return val

当我只是在 python 解释器中运行它时,这两种方法都可以在本地工作,但是当我尝试在实际服务器上运行它时,我总是得到“ValueError at / empty string for float()”。这让我相信这个过程并没有被等待。我错过了什么?

编辑:我正在使用 Django,所以它似乎只在我使用 Django 运行时才会中断。

4

1 回答 1

5

您必须实际调用进程的wait函数:

proc = subprocess.Popen(...)
retCode = proc.wait # retCode will be the function wait
retCode = proc.wait() # retCode will be the return code

但是,由于您要将输出重定向到,因此您应该注意wait文档中的警告并communicate改用。确保您的代码没有语法错误:

  • test.php可能不是变量名,而是字符串
  • 您混淆了两个变量名称,proc并且kprocess
  • 您在盲目地解析结果communicate(这不是严格意义上的错误,但会阻碍错误检测和跟踪)

相反,我建议:

proc = subprocess.Popen(['php', '-f', 'test.php'],
                        stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout,stderr = proc.communicate()
if proc.returncode != 0:
    raise Exception('Test error: ' + stderr)
return float(stdout)
于 2011-06-16T20:53:59.697 回答