子流程.Popen产生与bash不同的输出

2024-06-01 06:10:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用以下代码通过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)

从而产生错误:

^{pr2}$

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

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

据我所知,它在功能上等同于上面的python代码。我意识到Globus传输是深奥的,而且大多数人都不熟悉给定的命令,所以我想强调的是,我的问题更多地是关于为什么我的python代码生成的输出与bash代码的输出不同,因为它们应该执行相同的操作。在


Tags: topath代码orgclidirglobusssh
1条回答
网友
1楼 · 发布于 2024-06-01 06:10:47

此命令:

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

不等于:

^{pr2}$

您的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()的内容。在

相关问题 更多 >