Мне нужно запустить однострочную пакетную команду в моем скрипте Python.
В настоящее время я сохраняю свою команду в файле .bat и выполняю файл .bat с помощью функции subprocess. Но я хочу опустить файл .bat и напрямую включить команду в свой скрипт python. Потому что мне может понадобиться использовать разные bat-файлы для разных вариантов использования. Я бы предпочел использовать один динамический скрипт Python, чем сохранять несколько файлов .bat.
Команда летучей мыши:
"C:\Program Files (x86)\temp\FL.B5.exe" /s /a "C:\Users\kuk\Downloads\B5+Typ B.2.asc" /o "C:\Users\kuk\Download\B5+Typ B.2.docx"
Скрипт Python был:
import subprocess as sp
sp.call([r"C:\Users\kuk\Downloads\test.bat"])
Я хочу:
import subprocess
exe = r"C:\Program Files (x86)\temp\FL.B5.exe"
input = r"C:\Users\kuk\Downloads\B5+Typ B.2.asc"
output = r"C:\Users\kuk\Downloads\B5+Typ B.2.docx"
cmd = '{} /s /a {} /o {}'.format(soft,var1,var2)
subprocess.call(cmd)
Я не знаю, что не так, но не могу выполнить скрипт.
Любая помощь будет оценена!!
Ах, это мой плохой. Я забыл изменить имена переменных. soft, var1, var2 - это не что иное, как exe, ввод, вывод соответственно.
Ваш вопрос неоднозначен. если я правильно понял, вы можете использовать os.system
Os.system — это функция, которая выполняет команды из консоли.
import os
os.system('"C:\Program Files (x86)\temp\FL.B5.exe" /s /a "C:\Users\kuk\Downloads\B5+Typ B.2.asc" /o "C:\Users\kuk\Download\B5+Typ B.2.docx"')
Не используйте input в качестве имени переменной. Это встроенная функция Python.
Метод subprocess.call принимает список в качестве аргумента. При работе с задачами выполнения оболочки мне нравится использовать библиотеку shlex для цитирования параметров и разделения команд в список.
Примечание. Мне не приходилось выполнять сценарии в Windows около 12 лет, поэтому я не уверен, насколько shlex совместим с платформой.
import shlex
import subprocess as sp
exe = r"C:\Program Files (x86)\temp\FL.B5.exe"
in_file = r"C:\Users\kuk\Downloads\B5+Typ B.2.asc"
out_file = r"C:\Users\kuk\Downloads\B5+Typ B.2.docx"
params = tuple([shlex.quote(p) for p in (exe, in_file, out_file)])
command = f'%s /s /a %s /o %s' % params
sp.call(shlex.split(command))
Обязательно ли использовать метод shlex.quote()? Это делает команду с использованием переменных или что-то еще? Почему бы нам не использовать простое преобразование строк и не передать эту строку в shlex.split()?
shlex.quote()
может не понадобиться в вашем случае использования, но это шаблон, который я привык использовать, чтобы убедиться, что каждая часть правильно указана для использования в оболочке.
Что такое soft? var1? var2? (Кроме того, не переопределяйте встроенную функцию input Python с помощью переменной с тем же именем...)