我是Python新手。我试图使用子进程将下面的bash脚本命令转换为Python。当我执行我的Python脚本时,我没有得到任何输出,也没有看到任何失败。
这是需要移植到Python的bash命令。
curl -u 'lawn:oldlawn!' -k -s -H 'Content-Type: application/json' -X GET 'https://192.168.135.20:443/api/json/v2/types/dev-objs/1'
我的python代码:
get_curl():
curl = """curl -u 'lawn:oldlawn!' -k -s -H 'Content-Type: application/json' -X GET 'https://192.168.135.20:443/api/json/v2/types/dev-objs/1'"""
args = curl.split()
process = subprocess.Popen(args, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
print stdout
print stderr
# End of python code
执行get_curl()
后,print stdout
和print stderr
不会打印任何内容,但dev-objs/1
存在。
当我执行与bash命令相同的命令时,它可以工作,我看到REST API输出。
任何人都可以帮我解决这里可能出现的问题吗?感谢
答案 0 :(得分:3)
您可以使用requests:
headers = {
'Content-Type': 'application/json',
}
import requests
proxies = {
'https': 'https://lawn:oldlawn!@192.168.135.20:443',
}
req = requests.get('https:...', proxies=proxies, verify=False, headers=headers)
我不认为请求有-s标志,因为除非您打印 req.json()返回的内容,否则不会输出任何数据。
我认为您有一个大写U
而不是u
所以您真正需要做的就是使用basic-authentication传递auth = (user, pass)
,设置verify=False
根据{{3}}。
为什么你的子进程代码不起作用是因为你引用了一些类似"'lawn:oldlawn!'"
的args,你想要的是:
args = ['curl',
'-u',
'lawn:oldlawn!',
'-k',
'-s',
'-H',
'Content-Type: application/json',
'-X',
'GET',
'https://192.168.135.20:443/api/json/v2/types/dev-objs/1']
process = subprocess.Popen(args, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
答案 1 :(得分:1)
使用Generate dynamic unique id会使您的http请求变得更加简单:
// psuedo code
while( true ) {
line = "enter score or s to skip".prompt()
if (!"s".equals(line)) { // it wasn't s, read it
score = Double.parseDouble(line)
} else {
... skip or assign a default
score = 0.0d;
}
line = "enter grade or s to skip".prompt()
if ( !"s".equals(line) ) { it wasn't s, then read
grade = line;
} else {
.. skip or put default
grade = "A"
}