gpt4 book ai didi

python - subprocess.Popen 产生与 bash 不同的输出

转载 作者:太空宇宙 更新时间:2023-11-04 10:21:36 24 4
gpt4 key购买 nike

我正在尝试使用以下代码通过 python 进行 Globus 辅助文件传输:

get_task_id = subprocess.Popen(['ssh','gcw8@cli.globusonline.org','"transfer','-s','3','--','ep1#path/to/dir/','ep2#end/point/','-r"'],stdout=subprocess.PIPE)

产生错误:

Command 'transfer -s 3 -- ep1#path/to/dir/ ep2#end/point -r' not found.  Type 'help' for help.

考虑到我可以成功运行,这很奇怪:

ssh gcw8@cli.globusonline.org "transfer -s 3 -- ep1#path/to/dir/ ep2#end/point/ -r"

我认为它在功能上等同于上面的 python 代码。我意识到 Globus 传输是深奥的,大多数人不熟悉给出的命令所以我想强调我的问题更多是关于为什么我的 python 代码产生与我的 bash 代码不同的输出,考虑到它们应该做同样的事情。

最佳答案

这个命令:

subprocess.Popen(['ssh','gcw8@cli.globusonline.org',
'"transfer','-s','3','--','ep1#path/to/dir/','ep2#end/point/',
'-r"'],stdout=subprocess.PIPE)

不等同于:

ssh gcw8@cli.globusonline.org "transfer -s 3 -- ep1#path/to/dir/ ep2#end/point/ -r"

您的 subprocess.Popen 语句中有一些奇怪的引号。我想你只是想要:

subprocess.Popen(['ssh', 'gcw8@cli.globusonline.org', 
'transfer -s 3 -- ep1#path/to/dir/ ep2#end/point/ -r'])

请记住,除非您引用其中的一部分,否则 shell 会根据空格将您的命令拆分为标记。所以你的命令行最终被分成三个标记:

  1. ssh
  2. gcw8@cli.globusonline.org
  3. transfer -s 3 -- ep1#path/to/dir/ep2#end/point/-r

所以这正是您需要传递给 subprocess.Popen() 的内容。

关于python - subprocess.Popen 产生与 bash 不同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31926639/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com