I was wondering whether or not it is considered a good style to call bash commands within a Python script using os.system(). I was also wondering whether or not it is safe to do so as well.
I know how to implement some of the functionality I need in Bash and in Python, but it is much simpler and more intuitive to implement it in Bash. However, I feel like it is very hackish to write os.system("bash code").
Specifically, I want to move all files that end with a certain extension to a directory.
In bash: *mv .ext /path/to/destination In Python (Pseudocode): for file in directory: if file.endswith("ext"): move file to destination
In this case, what should I do?
Executing bash scripts using Python subprocess moduleWe can do it by adding optional keyword argument capture_output=True to run the function, or by invoking check_output function from the same module. Both functions invoke the command, but the first one is available in Python3. 7 and newer versions.
Python is easy, simple and powerful language. Bash is tough to write and not powerful as python. It is specially designed for web and app development.
The -s option to sh (and to bash ) tells the shell to execute the shell script arriving over the standard input stream. The script then starts python - , which tells Python to run whatever comes in over the standard input stream.
Bash scripting is a useful tool for a developer to utilize in increasing productivity and managing menial, repetitive tasks. A script, with proper set permissions and syntax, can execute commands in a fraction of the time a user would take.
First of all, your example uses mv, which is a program in coreutils, not bash.
Using os.system() calls to external programs is considered poor style because:
Look up glob, for shell-like pattern matching (globbing), and shutil, as others have already mentioned. Otherwise, everything you need is already in the standard libraries.
import glob
import shutil
for extfile in glob.glob('*.ext'):
shutil.move(extfile,dest)
In addition, os.system() should not be used - take a look at the subprocess module instead.
Check out Python's shutil
module. It offers file system operations such as moving files. Between that and the os
module, you should have all the tools you need. This is preferable to the bash commands for the reasons others said.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With