如何从Python打印语句中使用"php echo"?

2024-05-13 05:39:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将python矩阵转换为php(为解决这个问题奋斗了20多个小时)。我真的很感谢你的帮助!在

下面有两种情况:测试和真实。在

  • 测试:将php变量传递给python。显式地将值赋给python矩阵。这个矩阵应该调用php。在
  • REAL:一个php变量被传递给python。除了变量之外,还有一个文件被归档到python。然后,将解析后的值赋给应该调用php的matrix。在

它们运行的python输出和php代码完全相同。唯一的区别是,在实际情况下,文件被归档到python脚本中。测试python本身工作正常,真正的python本身工作正常,TEST php python运行正常,但真正的php python运行失败。所以我的猜测是,php不允许python在文件中放入python脚本??我的代码看起来像:

==========测试用例===========

====测试.py在

import os, sys, json
g = json.loads( sys.argv[1] )

gene = ['>MhA1_Contig0.frz3.gene1', '>MhA1_Contig0.frz3.gene1', '>MhA1_Contig0.frz3.gene1']
gene.append(g)
seq = ["ATGGAC", "GGCACAGC", "CCACC"]
seq.append('ACTGAAA')

print json.dumps(output)

====测试.php在

^{pr2}$

====网页上的结果

>MhA1_Contig0.frz3.gene1
ATGGAC
>MhA1_Contig0.frz3.gene1
GGCACAGC

==========真实情况===========

====真.py在

import os, sys, json

inF = file("getSeq_Mh.fasta", "r")
g = json.loads( sys.argv[1] )

inF = file("getSeq_Mh.fasta", "r")
line = inF.readline()
matrix = []
--- (some codes here) ---
inF = file("getSeq_Mh.fasta", "r")
line = inF.readline()
gene = []
--- (some codes here) ---
for i in range(len(index)) : 
    output[i][0] = ">" + gene[i]
    output[i][1]= str(matrix[i])[2:-4]

print json.dumps(output)
# print output

====真.php在

$output=null;
$g = "0.CUFF.6.1_2";
$data = escapeshellarg(json_encode($g));
exec("python /mysql/getSeq/real.py $data  2>&1 &", $output );
//exec("python /mysql/getSeq/real.py $data  2>&1", $output );  --> no difference in results
//exec("python /mysql/getSeq/real.py $data", $output );   --> no difference in results
$result = json_decode( exec("python /mysql/getSeq/real.py $data 2>&1", $output ) , true);
print_r($output) . "<br>";
//var_dump($output) . "<br>";
//print_r( $result) . "<br>";
//var_dump($result) . "<br>";
//echo $result[0][0] . "<br>";
//echo $result[0][1] . "<br>";
//echo $result[1][0] . "<br>";
//echo $result[1][1] . "<br>";

====网页上的结果

打印($output);-->;错误

Array ( [0] => Traceback (most recent call last): [1] => File "/mysql/getSeq/getOne.py", line 3, in [2] => inF = file("getSeq_Mh.fasta", "r") [3] => IOError: [Errno 2] No such file or directory: 'getSeq_Mh.fasta' [4] => Traceback (most recent call last): [5] => File "/mysql/getSeq/real.py.py", line 3, in [6] => inF = file("getSeq_Mh.fasta", "r") [7] => IOError: [Errno 2] No such file or directory: 'getSeq_Mh.fasta' )

var_dump($output);-->;错误

array(8) { [0]=> string(34) "Traceback (most recent call last):" [1]=> string(95) " File "/mysql/getSeq/getOne.py", line 3, in " [2]=> string(38) " inF = file("getSeq_Mh.fasta", "r")" [3]=> string(63) "IOError: [Errno 2] No such file or directory: 'getSeq_Mh.fasta'" [4]=> string(34) "Traceback (most recent call last):" [5]=> string(95) " File "/mysql/getSeq/real.py.py", line 3, in " [6]=> string(38) " inF = file("getSeq_Mh.fasta", "r")" [7]=> string(63) "IOError: [Errno 2] No such file or directory: 'getSeq_Mh.fasta'" } 

打印($result);-->;错误

(nothing)

var_dump($result);-->;错误

NULL 

========PYTHON本身===========

[['>MhA1_Contig0.frz3.gene1', 'ATGGACT'], ['>MhA1_Contig0.frz3.gene1', 'GGCACAGC'], ['>MhA1_Contig0.frz3.gene1', 'CCACC']]

Tags: pyjsonoutputmysqlresultfastafileinf
2条回答

解决了。当我把所有的文件真.py", "真.php,和“getSeq”_法斯塔Mh(已提交至真.py))在同一个目录中,它起作用了。在

谢谢,冻糕。你的赞扬给了我一个暗示。在

考虑使用PHP的proc_open()来处理子处理(输入/输出);这里的子进程是Python脚本。下面在命令行调用Python,传递$data参数并接收$output参数。在

有两个假设可能需要在您的端进行调整:python是服务器上的一个路径变量,python脚本和PHP脚本在同一个目录中。如果不是,请插入完整路径到python.exe命令行中的和/或将目录的完整路径插入到真.py在命令行中。在

$output=null;
$g = "0.CUFF.6.1_2";
$data = escapeshellarg(json_encode($g));

$cd = dirname(__FILE__);                       // CURRENT DIRECTORY OF SCRIPT
$output = null;

$descriptorspec = array(
   0 => array("pipe", "r"),
   1 => array("pipe", "w"),
   2 => array("file", $cd."/error.txt", "a")   // ERROR TXT OUTPUT OF PROCESSING
);

/* CALLING COMMAND LINE */
$process = proc_open("python \"$cd/real.py\" \"$data\"" , $descriptorspec, $pipes, $cd); 

/* RECEIVING OUTPUT */
$output = stream_get_contents($pipes[1]);
fclose($pipes[1]);
proc_close($process);

echo $output;

相关问题 更多 >