我是python和Linux的新手。我试图从python执行一个bash命令,它给localhost一个命令。
最初我尝试使用os.system
os.system('echo "(primitive-load \"/opt/doc/test.txt\")" |nc localhost xxxxx')
我使用os.system成功调用了几个命令。但是这个带有文件路径的特定命令不会执行。所以我尝试使用subprocess.call
subprocess.call( 'echo "(primitive-load \"/opt/doc/test.txt\")" |nc localhost xxxxx')
但是抛出了以下错误。
File "/usr/lib/python2.7/subprocess.py", line 523, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1343, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
我也尝试了以下
command = 'echo "(primitive-load \"/opt/doc/test.scm\")"|nc localhost xxxxx;'
process = os.popen(command)
实现这一目标的其他任何方式?
答案 0 :(得分:0)
在挖掘到subprocess.call
后,如果args
传递给subprocess.call是str
类型,如echo xxxx
',它将尝试查找可执行文件文件系统中的二进制echo xxxx
,它会导致IOError。
subprocess.call
还会收到args
列表。
所以,你可以这样做:
import subprocess
import shlex
subprocess.call(shlex.split('echo "(primitive-load \"/opt/doc/test.txt\")" |nc localhost xxxxx'))
您也可以将shell=True
传递给原始电话,例如:
subprocess.call('echo "(primitive-load \"/opt/doc/test.txt\")" |nc localhost 1111', shell=True)
可能导致安全性issues。
根据评论,它应该是这样的:
echo = subprocess.Popen('echo "(primitive-load \"/opt/doc/test.txt\")"', shell=True)
nc = subprocess.call('nc localhost 1111', shell=True, stdin=echo.stdout)
nc.wait()
答案 1 :(得分:0)
尝试以下操作可能对您的情况有所帮助:
if ($_GET['action_ent'] != "#!@#!@#!@")
{
$myInputs = $_GET['action_ent'];
foreach ($myInputs as $eachInput)
{
$valores = $eachInput;
print_r($valores);
$dummy = explode('#!@', $valores);
$acao = $dummy[0];
$resp_acao = $dummy[1];
$inic_plan_acao = $dummy[2];
$fim_plan_acao = $dummy[3];
$inicio_acc = explode("/", $inic_plan_acao);
$fim_acc = explode("/", $fim_plan_acao);
$inicio_action = $inicio_acc[2]."-".$inicio_acc[1]."-".$inicio_acc[0];
$fim_action = $fim_acc[2]."-".$fim_acc[1]."-".$fim_acc[0];
$result2 = mysql_query("INSERT INTO `demv3`.`entraves_action` (`action_id`, `ent_id`, `resp_ent`, `data_fim`,`action_desc`,`action_resp`,`action_comeco`,`action_fim`) VALUES ('0', '$ent_id', '$resp_ent', '$data_fim', '$acao', '$resp_acao', '$inicio_action', '$fim_action')");
}
}
else
{
echo "NOTHING";
}
希望这有助于不要忘记upvote
答案 2 :(得分:0)
这解决了我的问题。
loadData='echo "(primitive-load \\"/opt/doc/body.txt\\")" |nc localhost xxxxxx'
subprocess.call(loadData,shell=True)