【问题标题】:python subprocess.check_output giving wrong outputpython subprocess.check_output 给出错误的输出
【发布时间】:2015-05-14 16:21:13
【问题描述】:

我在这里执行此代码时遇到问题

subprocess.check_output(['ps -ef | grep ftp | wc -l'],env=environ,shell=True)

当我从终端执行时

ps -ef | grep ftp | wc -l

我得到“1”作为输出,这很好。

现在,我从 python 文件中执行与 subprocess.check_output 相同的代码,它给了我 2。这很奇怪。任何想法为什么会发生。完整代码如下:

 def countFunction():
    environ = dict(os.environ)
    return subprocess.check_output(['ps -ef | grep ftp | wc -l'],env=environ,shell=True)

 count = countFunction()     
 print count

编辑: 只是为了更新,我没有任何 ftp 连接。所以命令行在命令上打印 1 很好。 谢谢 阿文德

【问题讨论】:

  • 你的python进程中是否有名称ftp
  • 不,只是上面的代码。执行过程中没有 ftp 文本
  • 您可以轻松地解决这个问题,只需运行ps -ef | grep ftp 并查找额外进程的来源。
  • 提示:ps -ef | grep ftp 可能,根据时间的不同,不仅可以找到ftp,还可以找到grep ftp...
  • @twalberg:两个进程都是在运行之前创建的。否则将无法连接他们的管道。

标签: python python-2.7


【解决方案1】:

grep 命令会找到自己:

$ ps -ef | grep ftp
wallyk  12546 12326  0 16:25 pts/3    00:00:00 grep ftp

如果你不想这样,排除 grep 命令:

$ ps -ef | grep ftp | grep -v ftp
$

最好将-f 切换到ps 以便不搜索命令行参数。这样,它就不会找到 grep ftp 运行:

$ ps -e | grep ftp | wc -l

【讨论】:

  • 他没有运行任何 FTP 进程,所以他希望它只返回 1。
  • 感谢您的回复 wallyk 。是的,但是使用 python 代码,即使 ftp 已打开,您的上述命令也不会打印任何内容。
  • @MartinKonecny:没错!通过从结果中排除grep 命令,只有参数中包含ftp 的其他进程才会计算在内。
  • 谢谢你,-f 标志导致了问题。干杯!
  • @wallyk 任何想法为什么输出 ps -e | grep ftp | wc -l 在命令行输出中显示 1 而在 python 代码中显示 2!
猜你喜欢
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-08
  • 2014-02-24
  • 1970-01-01
  • 2014-12-04
  • 2021-02-11
相关资源
最近更新 更多