脚本中的子进程不起作用,手动启动时会起作用

Posted

技术标签:

【中文标题】脚本中的子进程不起作用,手动启动时会起作用【英文标题】: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 【参考方案1】:

fetched_data 因此是一个附加参数:

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

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

【讨论】:

你是对的,这就是我在代码中的方式,所以这不会是错误。不过谢谢。 所以some.exe 没有被调用,或者它没有返回任何东西? 我刚刚检查了一下,它显然返回了错误级别 2。如果我在 cmd 中使用相同的参数运行some.exe,它不会......所以这是参数语法的问题脚本肯定。谢谢你带我去那里。 错字:subprocess.( 缺少方法 @Paul:谢谢! c&p 错误

以上是关于脚本中的子进程不起作用,手动启动时会起作用的主要内容,如果未能解决你的问题,请参考以下文章

PHP启动的Bash后台进程不起作用

如何在 iOS 自动化脚本中搜索字符串中的子字符串? indexOf() 和 search() 方法不起作用

当 django 在 IIS 中托管时,python django 中使用的子进程不起作用

python子进程中的子shell

如果应用程序是通过 iTunes 安装的,推送通知不起作用,但如果通过 XCode 安装,它们会起作用

由多进程启动时功能不起作用