In bash when I used
在myscript.sh在
file="/tmp/vipin/kk.txt"
curl -L "myabcurlx=10&id-11.com" > $file
cat $file
./myscript.sh
给出了下面的输出
When I tried to fetch it using python and tried below code -
在我的python.py在
command = curl + ' -L ' + 'myabcurlx=10&id-11.com'
output = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE).stdout.read().decode('ascii')
print(output)
python mypython.py
抛出错误,请指出我的代码有什么问题吗。在
错误:
/bin/sh: line 1: &id=11: command not found
Wrong Parameter
推荐方法:
打印出这个字符串是什么,或者想想看。假设
^{pr2}$curl
是字符串'curl'
或'/usr/bin/curl'
或其他内容,则可以得到:显然这和你在shell上输入的东西不一样。最重要的是,最后一个参数没有被引用,它中间有一个
&
,这意味着您实际要求它做的是在后台运行curl
,然后运行其他一些不存在的程序,就像您这样做了一样:显然,您可以在字符串中手动包含引号:
…但是,如果字符串是变量而不是源代码中的文本,则这将不起作用,尤其是如果该变量中可能包含引号字符。在
shlex
模块有助于正确引用内容。在但是最简单的事情就是不要试图在一开始就构建一个命令行。您在这里没有使用任何shell特性,那么为什么还要添加额外的麻烦、性能成本、shell妨碍输出和重新编码的问题,以及可能的安全问题而毫无益处呢?在
使参数成为列表而不是字符串:
…把
shell=True
关了而且它很管用。不需要获得空格和引号和转义符。在
好吧,它仍然不能工作,因为
Popen
不返回输出,它是Popen
对象的构造函数。但这是一个完全独立的问题,如果你阅读文档,应该很容易解决。在但是对于这种情况,更好的解决方案是使用Python绑定libcurl,而不是调用命令行工具。或者,更好的是,因为您一开始没有使用curl的任何复杂特性,所以只需使用}和{}等有用属性,除非将其输出解析为一个巨大的字符串,否则无法从命令行工具中获得这些属性。在
requests
来发出相同的请求。不管是哪种方式,都可以将响应对象作为Python对象获得,该对象具有诸如text
和{相关问题 更多 >
编程相关推荐