【问题标题】:Subprocess in script doesn't work, when started manually it does脚本中的子进程不起作用,手动启动时会起作用
【发布时间】:2014-11-12 10:52:44
【问题描述】:

我有一个从 mssql 数据库读取数据并将读取数据传递给 some.exe 的子进程的脚本。 数据获取工作正常,但是一旦它应该开始 proc = subprocess.(["C:\\absolute\\path\\some.exe ", fetched_data]) proc.wait() 它似乎会跳过它并继续下一个 "fetched_data".. 我也尝试使用 subprocess.call(["C:\\absolute\\path\\some.exe ", fetched_data])

如果我在控制台 (windows cmd) 中启动 python 并执行完全相同的操作。

为什么在脚本中调用子进程不起作用,如果在控制台中手动发出它会起作用?


编辑:问题是在脚本中启动的子进程再次使用了another.exe,子进程找不到它(因为它使用了python路径)。从some.exeanother.exe 所在的目录启动时,脚本运行良好。

【问题讨论】:

  • 您确定在每种情况下都使用相同版本的 python 吗?有些人的电脑里有多条蟒蛇。
  • 你有完整的代码吗?您确定您的代码实际上要进入子流程行吗?有一个print "test" 来确认它实际上正在进入子流程
  • @Paul 是的,我已经明确检查过了。 @sumshi 我可以发布代码,但我认为没有必要。我在子进程调用之前和之后都打印了,它的打印没有延迟或输出some.exe

标签: python windows python-3.x subprocess pymssql


【解决方案1】:

fetched_data 因此是一个附加参数:

proc = subprocess.call(["C:\\absolute\\path\\some.exe ", fetched_data])

这是一个参数 LIST 而不是字符串,这是子进程所期望的。

【讨论】:

  • 你是对的,这就是我在代码中的方式,所以这不会是错误。不过谢谢。
  • 所以some.exe 没有被调用,或者它没有返回任何东西?
  • 我刚刚检查了一下,它显然返回了错误级别 2。如果我在 cmd 中使用相同的参数运行some.exe,它不会......所以这是参数语法的问题脚本肯定。谢谢你带我去那里。
  • 错字:subprocess.( 缺少方法
  • @Paul:谢谢! c&p 错误
猜你喜欢
  • 2014-11-10
  • 2020-01-01
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
  • 2014-09-14
  • 1970-01-01
  • 1970-01-01
  • 2019-08-14
相关资源
最近更新 更多