【问题标题】:Command not works in subprocess or os.popen but works in terminal命令在子进程或 os.popen 中不起作用,但在终端中起作用
【发布时间】:2019-07-19 21:49:51
【问题描述】:

我已经尝试了很多方法来运行我的 shell 脚本,但这些方法都不适用于 python3 脚本。该命令非常简单,可以在终端中正常工作。这是我没有成功的尝试:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import os

dat = os.popen('sh commonBash.sh').read()
print(dat)
if "no" in dat:
    print('Not found')
    status = 'Install'
else:
    print('Found')
    status = 'Remove'

当我在终端中运行时,输出是正确的并且可以正常工作,但是当我尝试在 python 脚本中运行时,它将无法正常工作。 这是shell脚本:

name="libreoffice" && dpkg-query -W $name && echo "$name"

python脚本的输出在这里:

dpkg-query: no packages found matching libreoffice   # Here the $name is correct
                                                     # This is $name, which is an empty newline
Found                                                # I don't know why, but the output is found

但是,当我运行实际程序时,同一部分的输出会有所不同。这里是:

           # Empty lines for print(dat) and echo "$name" also
           # Why?
Found      # And the result is still Found...

【问题讨论】:

  • 您收到什么错误信息?在您提供的形式中,它显然抱怨未定义的名称。但是,当添加 import os 时,子进程会按预期打印两次“test”
  • 我没有收到任何错误消息。 name 的值是什么。输出是一个空行。
  • 真的很奇怪。我已经在两个系统(MacOS 和 FreeBSD)上尝试过这个,并且在这两个系统上都打印了两次测试(如果我打印 dat 变量,则打印三次)。您确定 shell 变量 $name 的值为空吗?在您的 commonBash.sh 中尝试 name=test && echo "name = $name" 我宁愿怀疑获取 shell 脚本的标准输出存在一些问题。 P.S. 我用的是 python3 而不是 wxpython。
  • 在 linux Mint (ubuntu 18.04) 上,所有 3 个选项都按预期工作。
  • 这很奇怪......我已经更新了答案,以提供更多细节。

标签: python-3.x shell command


【解决方案1】:

好的,现在它适用于这些更改:

这是 shell 脚本 (commonBash.sh):

name=libreoffice
dat=$(dpkg-query -W $name)
echo "Checking for "$name": "
echo "$dat"
if [ "" == "$dat" ]; then
    echo "No "$name". Setting up "$name"..."
else
    echo $name" is installed already."
fi

这是python脚本:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import os

dat = os.popen('bash commonBash.sh').read()
print(dat)
if "No" in str(dat):
    print('Not found')
    status = 'Install'
else:
    print('Found')
    status = 'Remove'

这是输出(现在是正确的):

dpkg-query: no packages found matching libreoffice
Checking for libreoffice: 

No libreoffice. Setting up libreoffice...

Not found

【讨论】:

    猜你喜欢
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 2015-03-14
    • 2018-09-01
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多