【问题标题】:How to use curl command with parameters and executing the command from Python script(Python 2.6.6))如何使用带参数的 curl 命令并从 Python 脚本执行命令(Python 2.6.6))
【发布时间】:2017-04-05 17:54:01
【问题描述】:

我正在编写一个 python 脚本来自动化一些工作。

我需要从 Python 脚本执行 Curl 命令并将返回的 json 输出重定向到一个文件,以便我可以使用 python 脚本解析该文件。

另外,我需要在 Curl 命令中传递变量。

我的 curl 命令看起来像

curl -k -u <$username:&password> -X GET "https://xxxxxx:0000/rest/$jobtype/$id"  > jsonOutput.json

仅供参考,我使用的是 Python 2.6.6 版本

任何建议将不胜感激

谢谢, 哎呀

【问题讨论】:

    标签: python linux curl


    【解决方案1】:

    如果你使用requests library,那就更好了。使用此模块发出 HTTP 请求将非常容易,而且您不需要将输出保存在不同的文件中。会节省很多IO。

    【讨论】:

      【解决方案2】:

      使用subprocess.Popen 从 Python 调用外部命令。

      试试:

      subprocess.Popen('curl -k -u <$username:&password> -X GET "https://xxxxxx/Users/$username/$folderName/$id"', shell=True,  stdout=open('outputfile.json'))
      

      但是,最好将命令的每个部分都写在这样的数组中

      subprocess.Popen(['curl', '-k', '-u', 'user:pass', '-X', '-GET', url], stdout=open('outputfile.json'))
      

      那么没有必要使用shell=True,如果您在该命令中使用任何用户生成的输入,这会更安全。向用户提供对 shell 的访问权限并不安全!

      【讨论】:

      • 感谢您的回复。那么,我可以在 curl 命令中使用 python 变量(从命令行接收输入)吗?
      • @Jee 是的,请看我的第二个示例,我在参数列表中传递了名为 url 的变量(它不是字符串)。它的值将被传递给外部命令。您可以从任何您喜欢的来源获取url 的输入。
      • 一般来说,外部命令的每个空格分隔部分都应该是您传递给subprocess.Popen的数组中的一个单独元素。
      • 我执行了您提到的脚本。我可以看到脚本已执行,但 outputfile.json 中没有输出。我们如何才能将输出显示在终端(stdout)上,而不是将其重定向到文件。
      • @Jee 不要设置stdout 参数。运行命令的输出应该会显示在终端上。您应该查看docs了解更多信息。
      猜你喜欢
      • 1970-01-01
      • 2014-11-17
      • 1970-01-01
      • 1970-01-01
      • 2014-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多