如何解决subprocess.Popen:如何传递带有单引号和双引号的命令
我需要通过Python运行bash shell命令(Debian)并收集输出。
命令是
curl -H "Content-type:application/json" https://api.example.com/api/v1/login -d '{ "ldap": true,"username": "myusername","ldapPass": "mypassword","ldapOptions": {} }'
使用正确的URL,用户名和密码替换后,此命令在bash shell中有效。我想使用subprocess.Popen( cmd ...)
在Python程序中运行此命令很明显,在调用Popen(cmd)之前,我必须为 cmd 分配一些东西,但是我不知道是什么。我尝试添加像这样的转义字符:
cmd = "curl -H \"Content-type:application/json\" https://api.example.com/api/v1/login -d '{ \"ldap\": true,\"username\": \"myusername\",\"ldapPass\": \"mypassword\",\"ldapOptions\": {} }'"
p = subprocess.Popen(cmd.split(" "),stdout=subprocess.PIPE,stderr=subprocess.PIPE,close_fds=True)
(child_stderr,child_stdout) = p.communicate()
它没有用,并抛出了一个假胎。
然后我尝试手动构建cmd数组,然后在Popen调用期间不拆分它:
cmd = ["curl","-H","\"Content-type:application/json\"","https://api.example.com/api/v1/login","-d","'{ \"ldap\": true,\"ldapOptions\": {} }'"]
print(cmd)
print(" ".join(cmd))
p = subprocess.Popen(cmd,child_stdout) = p.communicate()
这也不起作用,并引发了异常。
有趣的是,当我复制“” .join(cmd)的输出并在shell中运行它时,效果很好。
我用过其他情况,例如
cmd = ["ps","-ef"]
效果很好。
如何为 cmd (使用单引号和双引号)分配适当的值,以便它可以使用Python的subprocess.Popen()正常运行?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。