首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >来自具有反斜杠的多个curl的curl

来自具有反斜杠的多个curl的curl
EN

Stack Overflow用户
提问于 2021-07-18 10:58:35
回答 1查看 554关注 0票数 0

我编写了一个python脚本来运行多个curl命令(我只列出了一个示例),这些命令从创建的URL中获取一些内容。但是,如本例所示,URL有一个反斜杠,在执行时,该反斜杠被解释为双反斜杠。因此,这是我想要运行的一个命令(请注意“fff”后面的反斜杠),如果我复制它并将其粘贴到Linux Ubuntu终端中,它将运行良好:

代码语言:javascript
运行
复制
curl https://api.example.com/fff\|2021-06-25--15-11-33/files -H 'Authorization: JWT eykjgjgjgkjgg'

这是我的密码:

代码语言:javascript
运行
复制
 import subprocess
 import shlex

 curl= "curl https://api.example.com/fff\|2021-06-25--15-11-33/files -H 'Authorization: JWT eykjgjgjgkjgg'"
    
 curlx=shlex.split(curl, posix=False)
 print(curlx[1])
 #the result of the printed URL is a valid url (with single backslash).
 print(curlx)
 #the result of the printed full command shows the invalid url (with double backslash)
 result= subprocess.run(curlx, stdout=subprocess.PIPE)
 result.stdout.decode('utf-8')
 print(result)

但是我一直得到这个错误,因为从结果中可以看到,命令运行时使用双反斜杠(在“fff”之后),而不是一个:

代码语言:javascript
运行
复制
#result of first print (curlx[1]):
https://api.example.com/fff\|2021-06-25--15-11-33/files

#result of second print (curlx):
curl https://api.example.com/fff\\|2021-06-25--15-11-33/files -H 'Authorization: JWT eykjgjgjgkjgg'

#result of third print (result):  
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100   232  100   232    0     0    163      0  0:00:01  0:00:01 --:--:--   163
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
      0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0CompletedProcess(args=['curl', 'https://api.example.com/fff\\|2021-06-25--15-11-33/files', '-H', "'Authorization: JWT eykjgjgjgkjgg'"], returncode=0, stdout=b'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">\n<title>404 Not Found</title>\n<h1>Not Found</h1>\n<p>The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.</p>\n')

我试着用一个反斜杠替换两个反斜杠,但这仍然被解释为两个反斜杠,因此错误一直在显示。我感谢任何帮助,因为我有500多个curl命令,这些命令需要很长时间才能手动运行。

FYI,我在Ubuntu20.04.2.0LTS上使用Pycharm 2021.1中的Python3.8

EN

回答 1

Stack Overflow用户

发布于 2021-07-20 14:37:23

异常中显示的字符串是字符串的repr(),而不是实际的字符串。字符串的repr值总是用转义反斜杠显示。如果您尝试print(row.iloc[0]),您应该看到它包含一个如预期的反斜杠。

有关更多信息,请参见此答案:https://stackoverflow.com/a/44667847/6825584

但这不是你的问题。在这里,问题是您没有正确地拆分subprocess.Popen的第一个参数。它期望第一个参数是一个数组,在您的情况下应该包含:

代码语言:javascript
运行
复制
['curl',
 'https://api.example.com/fff\|2021-06-25--15-11-33/files',
 '-H',
 "'Authorization: JWT eykjgjgjgkjgg'",
 '>>',
 'fff|2021-06-25--15-11-33.txt']

您可以使用shlex.split(row.iloc[0], posix=False)实现这一结果。请注意,这里的posix=False将保持反斜杠不变。

同样,当在解释器中运行此命令时,您将看到它打印了两个反斜杠,但是在使用print()时,它正确地显示了一个反斜杠。

代码语言:javascript
运行
复制
In [19]: curl = "curl https://api.example.com/fff\|2021-06-25--15-11-33/files -H 'Authorization: JWT eykjgjgjgkjgg' >> fff|2021-06-25--15-11-33.txt"

In [20]: shlex.split(curl, posix=False)
Out[20]:
['curl',
 'https://api.example.com/fff\\|2021-06-25--15-11-33/files',
 '-H',
 "'Authorization: JWT eykjgjgjgkjgg'",
 '>>',
 'fff|2021-06-25--15-11-33.txt']

In [21]: shlex.split(curl, posix=False)[1]
Out[21]: 'https://api.example.com/fff\\|2021-06-25--15-11-33/files'

In [22]: print(shlex.split(curl, posix=False)[1])
https://api.example.com/fff\|2021-06-25--15-11-33/files
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68428391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档