Как я могу выполнить команды, используя функцию подпроцесса - PullRequest
0 голосов
/ 03 мая 2020

Я хочу выполнить команды в сценарии python:

  1. Открыть cmd от имени администратора
  2. cd C:\elastic_stack\logstash-7.6.2
  3. .\bin\logstash -f C:/Users/Asus/Desktop/flask_project_part2/project/logstash_file.conf

Это то, что я пытаюсь сделать, но он не выполняет последний файл конфигурации:

import os, subprocess 
from subprocess import *  
os.chdir("C:\\Users") 
cmd = subprocess.Popen(["runas", "/noprofile", "/user:Administrator", "|", "cd", "C:/elastic_stack/logstash-7.6.2"], shell=True)        
cmd.subprocess.run(["./bin/logstash", "-f", "C:/Users/Asus/Desktop/flask_project_part2/project/logstash_file.conf"], shell=True)

1 Ответ

0 голосов
/ 03 мая 2020

У вас есть комбинация прямой и обратной косой черты, но я предполагаю, что вы установили ELK на windows машине:

К сожалению, у меня нет доступа к машине windows, поэтому я не было возможности проверить код. Но в основном это должно быть так:

import os
import subprocess

# desired path
target_dir = os.path.join("C:",os.sep,"elastic_stack",os.sep,"logstash-7.6.2")

# small check
if os.path.isdir(target_dir):
  os.chdir(target_dir)
else:
  print(" pathname does not refer to an existing directory")

# current working directory
print(os.getcwd())

# start logstash directly os.system will return the return code of the command if it's 0 means OK
os.system(".\\bin\\logstash -f C:\\Users\\Asus\\Desktop\\flask_project_part2\\project\\logstash_file.conf")

# if you need the output after you started logstash it will work ONLY in Python3

process = subprocess.run([".\\bin\\logstash", "-f", "C:\\Users\\Asus\\Desktop\\flask_project_part2\\project\\logstash_file.conf"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)


output = process.stdout
errors = process.stderr

PS: Вы можете os.sep при построении абсолютных или относительных путей, потому что в этом случае разделитель является системным c.

shell для аргумента default установлено значение False, и это означает, что системная оболочка не запущена, а если shell=True означает, что системная оболочка будет сначала вращаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...