gpt4 book ai didi

Python子进程无法获取oracle命令的输出 "imp"

转载 作者:太空宇宙 更新时间:2023-11-03 19:31:31 25 4
gpt4 key购买 nike

例如:

import subprocess
p=subprocess.Popen("imp -help",stdout=subprocess.PIPE,stdin=subprocess.PIPE)
out,err=p.communicate

输出为null

但其他 oracle 命令如“sqlplus -help”、“rman -help”工作正常

最佳答案

可能有两个问题导致您在标准输出中没有得到任何输出:

  1. 该进程正在将其所有输出转储到 stderr。
  2. 系统不知道如何执行“imp -help”

第一个问题的解决方案很简单:使用参数 stderr = subprocess.PIPE 捕获 stderr。

第二个问题的解决方案也很简单,但解释有点长:子进程不会猜测太多,它只会尝试将整个字符串作为一个命令执行。这意味着,在您的情况下,它将尝试将 "imp -help" 作为一个命令执行。它不会尝试使用参数“-help”执行命令“imp”。您必须分别明确地告诉子进程命令和参数。

来自Python documentation在子进程上:

args should be a string, or a sequence of program arguments. The program to execute is normally the first item in the args sequence or the string if a string is given, ...

这意味着您必须将命令和参数分开,并将它们按顺序打包在一起。此:"imp -help" 应如下所示:["imp", "-help"]。阅读documentation有关分割命令和参数的复杂性的更多详细信息,请参阅子进程。

代码应如下所示:

import subprocess
p=subprocess.Popen(["imp", "-help"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
stdin=subprocess.PIPE)
out,err=p.communicate()

注意:您还输入了 p.communicate 而不是 p.communicate()。我认为这是您的问题中的拼写错误,而不是您的代码中的拼写错误。

关于Python子进程无法获取oracle命令的输出 "imp",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5593002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com