子进程 Popen + curl + 二进制数据

0 投票
2 回答
3947 浏览
提问于 2025-04-15 18:00

下面这段代码运行得很正常:

os.system("curl --data-binary \@"+input_file_path+" -o "+ file_name +" localhost:30")

但是当我尝试用 subprocess.popen 来运行时:

Popen(['curl','--data-binary','\@'+input_file_path, '-o', file_name,'localhost:30'], stdout=PIPE).communicate()[0]

Curl 似乎卡住了(日志显示进入了无限循环),就好像没有把输入文件传给它(这对于 localhost:30 正常工作是必须的)……

有什么想法吗?

2 个回答

3

那要不试试用一个,而不是直接调用系统里的curl呢?

2

你可以试着在使用 subprocess.Popen 的时候,把原始字符串放进去,并加上一个额外的参数 shell=True

subprocess.Popen("curl --data-binary \@"+input_file_path+" -o "+ file_name +" localhost:30",
    stdout=subprocess.PIPE,
    shell=True)

撰写回答