Python将一个变量导入logstash

2024-04-18 11:18:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从python2.7调用logstash命令,其中conf名称中有vars,我尝试运行的完整shell命令是:

cat test.txt | sudo /usr/share/logstash/bin/logstash -f test.conf 

下面是我的Python代码:

^{pr2}$

我在插入前面在代码中创建的listname变量时遇到了问题,并且在调用logstash时也遇到了问题。我应该使用shell/子进程来完成这个任务,还是有更好的方法?在


Tags: 代码test命令txt名称sharebinusr
1条回答
网友
1楼 · 发布于 2024-04-18 11:18:51

上面的代码有很多问题。主要的问题可能是您的listname应该是一个字符串(如果test不包含字符串),并且第二个Popen调用的语法错误(每个参数都应该是自己的列表项)。在

另外,如果您需要第二个进程来使用sudo,则会有一些额外的问题,这取决于您是否需要添加密码。在

因此,根据如何处理这些问题,您的代码可能看起来像以下备选方案之一:

from subprocess import Popen, PIPE

listname = 'test'
b = '/tmp/{}.txt'.format(listname)
c = '/tmp/{}.conf'.format(listname)

first = Popen(['/bin/cat', b], stdout=PIPE)

# Alt 1, No sudo
second = Popen(['/usr/share/logstash/bin/logstash', '-f', c], stdin=first.stdout)

# Alt 2, sudo with no password
second = Popen(['sudo', '/usr/share/logstash/bin/logstash', '-f', c], stdin=first.stdout)

# Alt 3, add sudo password (most complex)

# Alt 3.1, store password in file (bad)
sudo_password = "clear_text_password"

#Alt 3.2, ask user for password:
from getpass import getpass, getuser
sudo_password = getpass("[sudo] password for {}: ".format(getuser()))

# Since we need to add password at stdin, we cannot directly pipe output from "first"
# instead we set stdin to PIPE, and write sudo password, followed by output from "first"
# sudo -kSp '' ensures that password is read from stdin without prompt being displayed
second = Popen(['sudo', '-kSp', '', '/usr/share/logstash/bin/logstash', '-f', c], stdin=PIPE)

second.stdin.write(sudo_password + '\n') # write password

# followed by output from "first".
for line in first.stdout:
    second.stdin.write(line)

second.stdin.close()

希望这能帮助你找到一个合适的解决方案。如果没有,请进一步说明您的问题。在

相关问题 更多 >