【问题标题】:How do I force subprocess.call or os.system to run in bash, instead of dash?如何强制 subprocess.call 或 os.system 在 bash 而不是 dash 中运行?
【发布时间】:2018-06-11 20:09:24
【问题描述】:

好的,所以我一直在努力解决这个问题。我正在尝试创建一个自动将文件上传到服务器的 python3 脚本。在命令行中,以下命令就像一个魅力:

sftp -i key.pem -P 3912 admin@myServerIP:home/files/ <<< $"put test.txt"

但是,当我尝试在我的 python 脚本中运行该命令时(通过os.system('command')subprocess.call('command')),我不断收到以下错误:

/bin/sh: 1: Syntax error: redirection unexpected

在做了一些研究之后,我相信我发现我需要在 /bin/bash 中运行命令,而不是默认的破折号,但是我已经尝试了一切,并且我一生都没有弄清楚该怎么做那!我希望这是一个简单而愚蠢的解决方法,这样我就可以上路了。谢谢!

【问题讨论】:

    标签: bash python-3.x terminal subprocess dash-shell


    【解决方案1】:

    你可以用这个替换你的命令:

    /bin/bash -c 'sftp -i key.pem -P 3912 admin@myServerIP:home/files/ <<< $"put test.txt"'
    

    即使在 Dash 中也应该可以正常工作。 :-)

    (顺便说一句,我认为您的意思是写 "put test.txt" 而不是 $"put test.txt"。但这既不是这里也不是那里。)


    编辑添加:我应该提一下,您的具体示例很容易以与 Dash 兼容的方式重写:

    echo "put test.txt" | sftp -i key.pem -P 3912 admin@myServerIP:home/files/
    

    在这种情况下可能更有意义。但是您很可能会发现bash -c ... 方法在将来对其他事情有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-20
      • 2019-03-23
      • 2011-10-23
      • 2011-09-07
      • 2021-01-30
      相关资源
      最近更新 更多