Запустите несколько строк команды cmd, используя python - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь запустить код cmd, используя python.

p = 'calcifer --config="C:\\Users\\yilin.chen\\Desktop\\pythonminingstuff\\calcifer\\calcifer\\pipelines\\run_config.yaml"'
subprocess.call('cd C:\\Program Files (x86)\\Olympus\\Vanta\\bin', shell = True)
subprocess.call(p, shell = True)

И позже я обнаружил, что эти две строки кода должны запускаться вместе. Поэтому я попытался

commands = """ SET foo=1 | SET foo=2 | echo %foo% """
b = subprocess.check_output(commands, shell=True)
print(b.decode('ascii'))

Который выложен здесь в качестве руководства https://mail.python.org/pipermail/tutor/2013-January/093474.html Но это не работает для меня. Приведенный выше код выполняет только последнюю строку, которая печатает% foo%. Если я копирую и вставляю оригинальный код, он печатает только «привет».

Есть мысли? Я ценю вашу помощь.

1 Ответ

0 голосов
/ 10 мая 2018

Кажется, что первая команда, которую вы пытаетесь выполнить, - это cd в каталог, чего можно добиться, установив параметр cwd в subprocess.call.

Чтобы привести небольшой пример, я скопировал двоичный файл echo в /Users/Samuel/tmp/eecchhoo. Если я попытаюсь перейти в каталог, а затем вызвать двоичный файл в двух вызовах подпроцесса, у меня произойдет сбой, как вы описали:

>>> import subprocess
>>> subprocess.call('cd /Users/Samuel/tmp', shell=True)
0
>>> subprocess.call('./eecchhoo helloworld', shell=True)
/bin/sh: ./eecchhoo: No such file or directory
127

Однако я могу сделать вызов успешным, установив для параметра cwd значение, которое я хочу:

>>> import subprocess
>>> subprocess.call('./eecchhoo helloworld', shell=True, cwd='/Users/Samuel/tmp')
helloworld
0

Если вам нужно запустить другие команды (не только для изменения рабочего каталога), вы можете обратиться к этому ответу: Python: выполнить подпроцесс cat параллельно .

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