ai didi

python shell 命令管道 grep 无结果

转载 作者:行者123 更新时间:2023-12-01 01:47:23 24 4
gpt4 key购买 nike

我正在尝试从 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 命令时,我需要做任何不同的事情吗?

最佳答案

由于 DNS= 周围的引号,您的脚本失败。

您可以使用shell=True 使脚本正常工作:

dnslineprocess = subprocess.Popen(getdnsline, stdin=userdataprocess.stdout, stdout=subprocess.PIPE, shell=True)

来源:Passing double quote shell commands in python to subprocess.Popen()?

关于python shell 命令管道 grep 无结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51125388/

24 4 0
文章推荐: javascript - 一般如何使用 jQuery 或 JavaScript 访问动态添加的元素及其 ID?
文章推荐: javascript - 使用 Handlebars.js 模板
文章推荐: javascript - 如何对每个字段从服务器到vue进行验证?
文章推荐: jquery - 在 jQuery bxSlider 中指定图像的百分比高度
行者123
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com