How to execute multiple CLI commands in a python script?

1.9k Views Asked by At

I am using TeamForge's CLI to create artifacts in the Defects tracker section. The CLI file/executable is called "ctf" with no extensions. I want to use a python script to create artifacts but can only execute one command at most. I want to create a bug in one shot. This is the code I have so far:

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

Here is the error I keep getting:

sh: 1: create: not found
sh: 1: commit: not found

So I believe that these commands are not being executed sequentially or in the order that I have specified. This means that each command is being executed separately. Any suggestions to get these commands running in the order that I have specified?

Let me know if further explanation is required.

Update

I just found out that you can do this: go tracker1234 create which is two steps in one

2

There are 2 best solutions below

6
On BEST ANSWER

You could try to quote your arguments to ctf; just look at this:

>>> os.system("echo hi; echo again;")
hi
again

versus:

>>> os.system("echo 'hi; echo again;'")
hi; echo again;

The semicolon terminates a command in a shell. If your arguments contain semicolons, you must quote them so they don't break your list of arguments.

However, according to the CTF guidelines, their way of handling such a situation with multiple commands seems to be putting them into a script and executing that with:

./ctf script.txt
0
On

To pass information to your program on the standard input, either use

Alternatively, your program may have some "batch processing mode" that would allow you to provide your set of commands on the command line or in a file, but, looking at the CTFCLI manual page, this doesn't seem likely.