subprocess.check_output():在Python中找不到OSError文件

时间:2015-04-27 08:47:45

标签: python

执行以下命令及其变体总是会导致错误,我无法弄清楚:

  // Do not re-create Random! Create it once only
  // The simplest implementation - not thread-save
  private static Random s_Generator = new Random();

  ...
  // you can easiliy update the margin if you want, say, 91.234%
  const double margin = 90.0 / 100.0; 

  int result = s_Generator.NextDouble() <= margin ? 1 : 0;

它所指的文件是什么?其他命令如ls,wc正在正常运行,该命令在终端上也运行良好但不是python脚本。

2 个答案:

答案 0 :(得分:13)

您的command是一个包含一个元素的列表。想象一下,如果你试图在shell上运行它:

/bin/'dd if='/dev/'sda8 count=100 skip=$(expr 19868431049 '/' 512)'

这实际上是你正在做的事情。几乎可以肯定,dd if=目录中没有名为bin的目录,而dev目录下的sd8 count=100 skip=$(expr 19868431049目录几乎肯定没有512目录其中包含名为command = ['/bin/dd', 'if=/dev/sda8', 'count=100', 'skip=$(expr 19868431049 / 512)'] print subprocess.check_output(command) # notice no [] 的程序的目录。

你想要的是一个列表,其中每个参数都是它自己的元素:

$(expr 19868431049 / 512)

但这带来了我们的第二个问题:dd不会被Python或command = ['/bin/dd', 'if=/dev/sda8', 'count=100', 'skip={}'.format(19868431049 // 512)] print subprocess.check_output(command) 解析;那个bash语法。当然,你可以用Python而不是bash做同样的事情:

shell=True

或者,如果你真的想在没有充分理由的情况下使用bash,请传递字符串而不是列表,然后使用command = "/bin/dd if=/dev/sda8 count=100 skip=$(expr 19868431049 / 512)" print subprocess.check_output(command, shell=True) # still no []

/bin/sh

虽然这仍然无法移植,但由于默认shell为$(…),它可能不知道如何处理像expr(和expr这样的基础知识,尽管我认为POSIX要求command = "/bin/dd if=/dev/sda8 count=100 skip=$(expr 19868431049 / 512)" print subprocess.check_output(command, shell=True, executable='/bin/bash') 作为一个单独的进程存在...)。所以:

Sharepoint 2007

答案 1 :(得分:0)

这对我使用$this->addColumn('news', 'priority', 'integer AFTER `name`');

起作用了
subprocess.popen