Python notebook 中的 !curl 命令失败,出现 500 内部错误
Posted
技术标签:
【中文标题】Python notebook 中的 !curl 命令失败,出现 500 内部错误【英文标题】:!curl commands in Python notebook fail with 500 Internal error 【发布时间】:2022-01-20 13:38:40 【问题描述】:我在 Google Colab 中运行以下代码并获得 The server encountered an internal error or misconfiguration and was unable to complete your request
。如果我在运行命令时没有像下面那样传入变量$data
,它运行得非常好。只有当我遍历文件并传递变量时它似乎失败了
import csv
import json
reader = csv.reader(open('/content/drive/MyDrive/file5.csv'))
for row in reader:
data = "snps": row[0], "pop": "YRI", "r2_threshold": "0.9", "maf_threshold": "0.01"
data = json.dumps(data)
data = "''".format(data)
!curl -k -H "Content-Type: application/json" -X POST -d "$data" 'https://ldlink.nci.nih.gov/LDlinkRest/snpclip?token=e3e559472899'
这行得通:
!curl -k -H "Content-Type: application/json" -X POST -d '"snps": "rs3\nrs4", "pop":"YRI", "r2_threshold": "0.1", "maf_threshold": "0.01"' 'https://ldlink.nci.nih.gov/LDlinkRest/snpclip?token=e3e559472899'
【问题讨论】:
首先使用请求,因为它很容易管理它的属性。还可以尝试打印出您传递给请求的值,以便您知道错误发生在哪一行。 【参考方案1】:更新:实际上,ipython
确实允许您在循环中运行 !
转义;代码中的实际错误纯粹在于不正确的引用(尤其是在 data
值周围添加单引号,但可能还有更多)。
下面的原始(部分错误)答案。
!
转义告诉你的笔记本(Google Colab、Jupyter 或你有什么;基本上任何运行 ipython
作为内核或类似的东西)离开 Python 并运行 shell 命令。 Python 本身不支持这个;最接近的近似值类似于
import subprocess
...
for row in reader:
data = "snps": row[0], "pop": "YRI", "r2_threshold": "0.9", "maf_threshold": "0.01"
data = json.dumps(data)
# This was wrong on so many levels
# data = "''".format(data)
subprocess.run(['curl', '-k',
'-H', "Content-Type: application/json",
'-X', 'POST', '-d', data,
'https://ldlink.nci.nih.gov/LDlinkRest/snpclip?token=e3e559472899'],
text=True, check=True)
虽然避免 subprocess
并运行 Python urllib
或 requests
代码来执行 POST
会更加高效和优雅,并且让您可以更好地控制发送的内容和处理方式。
在 shell 命令和 Python 之间转换时如何正确引用字符串需要你了解 shell 的引用行为。我只是简要说明一下,我在原始命令中不正确的地方留下了双引号,但在其他方面首选单引号,当然,data
现在指的是具有该名称的正确 Python 变量,而不是带有同名。
重申:ipython
(这是您的笔记本的接口)知道如何通过!
运行 Python 代码和 shell scipt 代码;但是一旦你要求它运行 Python 代码,ipython
就将它交给 Python,你就不再在 ipython
中了。
【讨论】:
感谢您的接受,但我原来的答案并不正确。请查看更新后的答案。以上是关于Python notebook 中的 !curl 命令失败,出现 500 内部错误的主要内容,如果未能解决你的问题,请参考以下文章
从父目录中的 python 模块导入到子目录中的 jupyter notebook 文件中
Python:Jupyter Notebook 中的漂亮打印
Jupyter Notebook 中的 Python 相对导入
在Jupyter notebook中使用特定虚拟环境中的python的kernel