【发布时间】:2018-12-10 01:04:47
【问题描述】:
我正在尝试从 python 中的 cpanel 用户获取域名。
这是我的代码:
import subprocess
user = "testuser"
getuserdata = 'cat /var/cpanel/users/' + user
getdnsline = 'grep "DNS="'
test = 'wc -l'
userdataprocess = subprocess.Popen(getuserdata.split(), stdout=subprocess.PIPE)
testprocess = subprocess.Popen(test.split(), stdin=userdataprocess.stdout, stdout=subprocess.PIPE)
test, error = testprocess.communicate()
print(test)
dnslineprocess = subprocess.Popen(getdnsline.split(), stdin=userdataprocess.stdout, stdout=subprocess.PIPE)
website, error = dnslineprocess.communicate()
print(website.decode('utf-8').splitlines())
我的输出是:
b'60\n'
[]
这意味着 wc -l 命令返回 60 行。因此,将第一个 getuserdata 命令的输出传递给 wc -l 命令是可行的。
但是,grep 命令总是返回空白。无论我输入“DNS =”还是“=”甚至是“a”。该文件是普通的cpanel用户文件,我已经验证了DNS在文件中。
当我从第一个进程 userdataprocess 输出数据时,我可以手动检查 DNS 条目。
以这种方式使用 grep 命令时,我是否需要做一些不同的事情?
【问题讨论】:
-
userdataprocess.stdout在dnslineprocess运行时为空,因为testprocess已经消耗了所有这些。我不知道有一个简单的解决方法 - 但无论如何你对subprocess的使用是完全没有必要的:你用它做的一切(读取文件、计算行数、检查这些行中的特定文本)都是微不足道的直接在 Python 中。
标签: python subprocess pipe