【问题标题】:Arguments too long for check_output? Fail with error 127check_output 的参数太长?失败并出现错误 127
【发布时间】:2017-11-15 07:44:26
【问题描述】:

我需要从我的 Python 脚本中调用一个可执行文件并恢复其输出。所以我这样做:

command = executable + ' -a something ' + variable + ' -b somethingElse'
output = subprocess.check_output(shlex.split(command),shell=True)

当我执行此操作时,我收到错误 127。问题可能与参数的大小有关:最终执行的字符串长度超过 1300 个字符。但奇怪的是,如果我将该字符串复制粘贴到 shell 中并执行它,那么它可以完美运行。 Python中是否有我不知道的限制?我想我可以设计其他解决方案,但是 (a) 我更喜欢这个,并且 (b) 我对这个问题很好奇。

【问题讨论】:

  • executable 包含什么 - 只是程序名称还是完整路径?
  • 为什么要拆分字符串而不是直接将参数作为list 传递?
  • @Błotosmętek 它包含可执行文件的完整(绝对)路径
  • @Jean-FrançoisFabre 没有特别的原因......这只是我在所有其他情况下都遵循的方法(这种方法工作得很好)
  • 您应该使用正确的代码edit您的问题并回答您自己的问题,而不是使用“已解决”来编辑您的问题。那会很有趣。我知道shell=True 不好,应该避免,但我不知道它会影响命令行的大小。这样做你会得到一些支持。

标签: python shell subprocess command-line-arguments


【解决方案1】:

删除shell=True(无论如何都不需要)解决了参数长度问题。

经验教训:不要使用shell=True,除非您无能为力(即使在这种情况下,也可能有更好的解决方案)

【讨论】:

    猜你喜欢
    • 2014-11-10
    • 2018-02-24
    • 1970-01-01
    • 2019-05-22
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 2021-10-12
    相关资源
    最近更新 更多