将php值作为sys.argv传递给python

2024-06-16 11:22:12 发布

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

我想将复选框值传递到python脚本并添加到列表中

我的php文件:

<form action="index.php" method="post">

Which buildings do you want access to?<br />
<input type="checkbox" name="formDoor[]" value="Acorn" />Acorn Building<br />
<input type="checkbox" name="formDoor[]" value="Brown" />Brown Hall<br />
<input type="checkbox" name="formDoor[]" value="Carnegie" />Carnegie Complex<br />
<input type="checkbox" name="formDoor[]" value="Drake" />Drake Commons<br />
<input type="checkbox" name="formDoor[]" value="Elliot" />Elliot House

<input type="submit" name="formSubmit" value="Submit" />

</form>

<?php
  $aDoor = $_POST['formDoor'];
  if(empty($aDoor)) 
  {
    echo("You didn't select any buildings.");
  } 
  else 
  {
    $N = count($aDoor);
    $command = escapeshellcmd('python3 test.py');
    $output = shell_exec($command);

    echo("You selected $N door(s): ");
    for($i=0; $i < $N; $i++)
    {
      echo($aDoor[$i] . " ");      
    }
    echo $output;
  }
?>

我的Python脚本:

import sys

params = []

if ("Acorn" in str(sys.argv)):
    params += ["Acorn Building"]

if ("Brown" in str(sys.argv)):
    params += ["Brown Hall"]
    
if ("Carnegie" in str(sys.argv)):
    params += ["Carnegie Complex"]

if ("Drake" in str(sys.argv)):
    params += ["Drake Common"]

if ("Elliot" in str(sys.argv)):
    params += ["Elliot House"]

print (params)

因此,如果我检查了python和 (打印(参数)用于检查参数的字符串)

问题是python无法识别sys.argv()并且没有通过if语句,我应该更改什么


Tags: nameinbrinputifvaluetypesys
1条回答
网友
1楼 · 发布于 2024-06-16 11:22:12

您不必将sys.argv强制转换为字符串

如果像python3 test.py Elliot一样调用脚本,那么sys.argv是下面的列表

["test.py", "Elliot"]

那么

"Elliot" in sys.argv

将返回True

顺便说一下,您也不需要if条件周围的()

编辑:要在对此答案的评论中回答您的问题,请执行以下操作:

<?php
  $aDoor = $_POST['formDoor'];
  if(empty($aDoor)) 
  {
    echo("You didn't select any buildings.");
  } 
  else 
  {
    $N = count($aDoor);
    // convert the array of checked values to a space-separated string
    $args = implode(" ", $aDoor)
    // use an interpolated string with the arguments in command string (note the double quotes)
    $command = escapeshellcmd("python3 test.py $args"); 
    $output = shell_exec($command);

    echo("You selected $N door(s): ");
    for($i=0; $i < $N; $i++)
    {
      echo($aDoor[$i] . " ");      
    }
    echo $output;
  }
?>

相关问题 更多 >