使用subprocess从Python调用PHP

1 投票
2 回答
4832 浏览
提问于 2025-04-18 09:41

我的Python脚本是:

base_url = "http://server.com/sync.php?"
phone_url = "phone=%s" % "12345678"
pass_url = "pass=%s" % "xxxxxxxxx"
verif_url = "u=%s" % "12345678"
url =  base_url + "%s&%s&%s" % (phone_url,pass_url,verif_url)
req = urllib.urlopen(url)
the_page = req.read()

这个网址看起来像这样:http://server.com/sync.php?phone=123456781&pass=xxxxxxxxx&u=12345678

运行得很好,但是速度很慢...

所以我尝试使用Subprocess:

proc = subprocess.Popen("php ./sync.php", "shell=True, stdout=subprocess.PIPE)
script_response = proc.stdout.read()

我该如何发送参数?(电话、密码、用户)

我的PHP文件内容是:

$username = $_GET["phone"];
$password = $_GET["pass"];
$u = $_GET["u"];

2 个回答

0

我觉得你调用子进程的方式不对。

附言:不要使用相对路径,要使用绝对路径。

你可以试试这个:

proc = subprocess.Popen("php /path/to/your/sync.php arg1 arg2 argN", shell=True, stdout=subprocess.PIPE)
script_response = proc.stdout.read()
1

要给 Popen 提供参数,你应该把这些参数放在一个列表里:

cmd = ["php", "./sync.php"]
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)

你可以查看 Popen 的帮助文档,里面说明第一个参数 args 应该是一个程序参数的序列,或者是一个单独的字符串

另外,你还可以使用 cwd 参数来指定当前的工作目录。

撰写回答