Как выполнить несколько команд CLI в скрипте Python?
Я использую CLI TeamForge для создания артефактов в разделе трекера дефектов. Файл / исполняемый файл CLI называется "ctf" без расширений. Я хочу использовать скрипт Python для создания артефактов, но могу выполнить не более одной команды. Я хочу создать ошибку в одном кадре. Это код, который я до сих пор:
import os
os.system("./ctf go tracker1234; # going to Defects section
create; # creating an artifact
set title This Is A Title; # setting artifact's fields
set description desc123;
set Product [Product 23];
set build_number Not known;
set Severity Catastrophic;
set steps_to_reproduce 1st comment;
set Component [component 4];
set Version [version 19];
commit) # saving the artifact on TeamForge
Вот ошибка, которую я продолжаю получать:
sh: 1: create: not found
sh: 1: commit: not found
Поэтому я считаю, что эти команды не выполняются последовательно или в указанном мной порядке. Это означает, что каждая команда выполняется отдельно. Любые предложения, чтобы эти команды выполнялись в указанном мной порядке?
Дайте мне знать, если требуется дальнейшее объяснение.
Обновить
Я только что узнал, что вы можете сделать это: go tracker1234 create
что два шага в одном
2 ответа
Вы можете попытаться процитировать свои аргументы в ctf; просто посмотрите на это:
>>> os.system("echo hi; echo again;")
hi
again
против:
>>> os.system("echo 'hi; echo again;'")
hi; echo again;
Точка с запятой завершает команду в оболочке. Если ваши аргументы содержат точки с запятой, вы должны заключить их в кавычки, чтобы они не ломали ваш список аргументов.
Тем не менее, в соответствии с рекомендациями CTF, их способ обработки такой ситуации с несколькими командами, кажется, заключает их в сценарий и выполняет с помощью:
./ctf script.txt
Чтобы передать информацию в вашу программу на стандартный ввод, либо используйте
- средства вашей оболочки, такие как здесь-документ или конвейер, в указанной командной строке, или
- Средства Python, например, как Как запустить и передать ввод во внешнюю программу
В качестве альтернативы ваша программа может иметь некоторый "режим пакетной обработки", который позволил бы вам предоставлять набор команд в командной строке или в файле, но, глядя на справочную страницу CTFCLI, это маловероятно.