为什么我不能使用python Popen从PHP获得输出

I have a program that calls PHP from python, with popen, and I don't get any stdout or stderr from my calls.

The problematic lines are:

task = subprocess.Popen(
        ['/usr/bin/php', exec_path],
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        env=env
    )
stdout_str, stderr_str = task.communicate()
task_result = task.returncode

When I replace the PHP path with ls, it works:

task = subprocess.Popen(
    ['/bin/ls', exec_path],
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    env=env
)

stdout_str, stderr_str = task.communicate()
task_result = task.returncode
# Works as expected

And when I run the PHP command from the shell, it does produce output.

For reference, the PHP file is:

<?
echo "YAY";
?>%  

展开翻译

译文

我有一个从python调用PHP的程序,使用popen,我没有得到任何stdout或stderr 我的电话。</ p>

有问题的行是:</ p>

  task = subprocess.Popen(
['/ usr / bin / php' ,exec_path],
stdout = subprocess.PIPE,
stderr = subprocess.PIPE,
env = env

stdout_str,stderr_str = task.communicate()
task_result = task.returncode
</ code> </ pre>

当我用ls替换PHP路径时,它可以工作:</ p>

  task = subprocess.Popen(
['/ bin / ls',exec_path],
stdout = subprocess.PIPE,
stderr = subprocess.PIPE,
env = env

stdout_str,stderr_str = task.communicate()
task_result = task.returncode
#按预期工作
</ code> </ pre>

当我从shell运行PHP命令时,它确实产生输出。</ p>

供参考 ,PHP文件是:</ p>

 &lt;?
echo“YAY”;
?&gt;%
</ code> </ pre>
</ div >

dongluan2612
dongluan2612 哦,那只是外壳,表明那里没有新行
接近 5 年之前 回复
doujing8435
doujing8435 另外,最后的百分比是多少?
接近 5 年之前 回复
douzhanshen0657
douzhanshen0657 PHP文件不应该以<?php开头?
接近 5 年之前 回复
dongshiru5913
dongshiru5913 toolong
接近 5 年之前 回复
dougou6213
dougou6213 exec_path在两种情况下是一样的吗?我想知道它是否是一个许可问题。
接近 5 年之前 回复

1个回答

I fixed my problem. Earlier I had written the file contents, and forgotten to flush() it, so the file was empty when the exec call happened.

展开翻译

译文



我解决了我的问题。 之前我写过文件内容,忘记刷新(),所以当执行exec调用时文件为空。</ p>
</ div>

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问