Answer

Let's break it down into pieces. Especially the pieces you got wrong. :)


Assignment

outfile=ReadsAgain.txt

It should come to little surprise that you need to put quotes around strings. On the other hand, you have the luxury of putting spaces around the = for readability.

outfilename = "ReadsAgain.txt"

Variable expansion → str.format (or, the % operation)

python reads.py <snip/> -q$queries <snip/>

So you know how to do the redirection already, but how do you do the variable expansion? You can use the format method (v2.6+):

command = "python reads.py -r1 -pquery1.sql -q{0} -shotelspec -k6 -a5".format(queries)

You can alternatively use the % operator:

#since queries is a number, use %d as a placeholder
command = "python reads.py -r1 -pquery1.sql -q%d -shotelspec -k6 -a5" % queries

C-style loop → Object-oriented-style loop

for ((r = 1; r < ($runs + 1); r++)) do done

Looping in Python is different from C-style iteration. What happens in Python is you iterate over an iterable object, like for example a list. Here, you are trying to do something runs times, so you would do this:

for r in range(runs):
  #loop body here

range(runs) is equivalent to [0,1,...,runs-1], a list of runs = 5 integer elements. So you'll be repeating the body runs times. At every cicle, r is assigned the next item of the list. This is thus completely equivalent to what you are doing in Bash.

If you're feeling daring, use xrange instead. It's completely equivalent but uses more advanced language features (so it is harder to explain in layman's terms) but consumes less resources.


Output redirection → the subprocess module

The "tougher" part, if you will: executing a program and getting its output. Google to the rescue! Obviously, the top hit is a stackoverflow question: this one. You can hide all the complexity behind it with a simple function:

import subprocess, shlex
def get_output_of(command):
  args = shlex.split(command)
  return subprocess.Popen(args,
                          stdout=subprocess.PIPE).communicate()[0]
  # this only returns stdout

So:

python reads.py -r1 -pquery1.sql -q$queries -shotelspec -k6 -a5 >> $outfile

becomes:

command = "python reads.py -r1 -pquery1.sql -q%s -shotelspec -k6 -a5" % queries
read_result = get_output_of(command)

Don't over-subprocess, batteries are included

Optionally, consider that you can get pretty much the same output of date with the following:

import time
time_now = time.strftime("%c", time.localtime()) # Sat May 15 15:42:47 2010

(Note the absence of the time zone information. This should be the subject of another question, if it is important to you.)


How your program should look like

The final result should then look like this:

import subprocess, shlex, time
def get_output_of(command):
  #... body of get_output_of
#... more functions ...
if __name__ = "__main__":
  #only execute the following if you are calling this .py file directly,
  #and not, say, importing it
  #... initialization ...
  with file("outputfile.txt", "a") as output_file: #alternative way to open files, v2.5+
    #... write date and other stuff ...
    for r in range(runs):
      #... loop body here ...

Post scriptum

That must look pretty horrible when compared to the relatively simple and short Bash script, right? Python is not a specialized language: it aims to do everything reasonably well, but isn't built directly for running programs and getting the output of those.

Still, you wouldn't normally write a database engine in Bash, right? It's different tools for different jobs. Here, unless you're planning to make some changes that would be non-trivial to write with that language, [Ba]sh was definitely the right choice.

Answer from badp on Stack Overflow
🌐
GitHub
github.com › syuanca › bash2python
GitHub - syuanca/bash2python: A tool that converts a bash script to python script
A tool that converts a bash script to python script - syuanca/bash2python
Starred by 22 users
Forked by 11 users
Languages   Python 56.7% | Shell 43.3% | Python 56.7% | Shell 43.3%
Top answer
1 of 3
38

Answer

Let's break it down into pieces. Especially the pieces you got wrong. :)


Assignment

outfile=ReadsAgain.txt

It should come to little surprise that you need to put quotes around strings. On the other hand, you have the luxury of putting spaces around the = for readability.

outfilename = "ReadsAgain.txt"

Variable expansion → str.format (or, the % operation)

python reads.py <snip/> -q$queries <snip/>

So you know how to do the redirection already, but how do you do the variable expansion? You can use the format method (v2.6+):

command = "python reads.py -r1 -pquery1.sql -q{0} -shotelspec -k6 -a5".format(queries)

You can alternatively use the % operator:

#since queries is a number, use %d as a placeholder
command = "python reads.py -r1 -pquery1.sql -q%d -shotelspec -k6 -a5" % queries

C-style loop → Object-oriented-style loop

for ((r = 1; r < ($runs + 1); r++)) do done

Looping in Python is different from C-style iteration. What happens in Python is you iterate over an iterable object, like for example a list. Here, you are trying to do something runs times, so you would do this:

for r in range(runs):
  #loop body here

range(runs) is equivalent to [0,1,...,runs-1], a list of runs = 5 integer elements. So you'll be repeating the body runs times. At every cicle, r is assigned the next item of the list. This is thus completely equivalent to what you are doing in Bash.

If you're feeling daring, use xrange instead. It's completely equivalent but uses more advanced language features (so it is harder to explain in layman's terms) but consumes less resources.


Output redirection → the subprocess module

The "tougher" part, if you will: executing a program and getting its output. Google to the rescue! Obviously, the top hit is a stackoverflow question: this one. You can hide all the complexity behind it with a simple function:

import subprocess, shlex
def get_output_of(command):
  args = shlex.split(command)
  return subprocess.Popen(args,
                          stdout=subprocess.PIPE).communicate()[0]
  # this only returns stdout

So:

python reads.py -r1 -pquery1.sql -q$queries -shotelspec -k6 -a5 >> $outfile

becomes:

command = "python reads.py -r1 -pquery1.sql -q%s -shotelspec -k6 -a5" % queries
read_result = get_output_of(command)

Don't over-subprocess, batteries are included

Optionally, consider that you can get pretty much the same output of date with the following:

import time
time_now = time.strftime("%c", time.localtime()) # Sat May 15 15:42:47 2010

(Note the absence of the time zone information. This should be the subject of another question, if it is important to you.)


How your program should look like

The final result should then look like this:

import subprocess, shlex, time
def get_output_of(command):
  #... body of get_output_of
#... more functions ...
if __name__ = "__main__":
  #only execute the following if you are calling this .py file directly,
  #and not, say, importing it
  #... initialization ...
  with file("outputfile.txt", "a") as output_file: #alternative way to open files, v2.5+
    #... write date and other stuff ...
    for r in range(runs):
      #... loop body here ...

Post scriptum

That must look pretty horrible when compared to the relatively simple and short Bash script, right? Python is not a specialized language: it aims to do everything reasonably well, but isn't built directly for running programs and getting the output of those.

Still, you wouldn't normally write a database engine in Bash, right? It's different tools for different jobs. Here, unless you're planning to make some changes that would be non-trivial to write with that language, [Ba]sh was definitely the right choice.

2 of 3
11

It should be fairly simple to port your program. The only tricky part will be running the db2 command and (maybe) refactoring reads.py so that it can be called as a library function.

The basic idea is the same:

  • Setting local variables is the same.
  • Replace echo with print.
  • Replace your loop with for r in range(runs):.
  • Get the date with the datetime module.
  • Replace write to file with the file objects module.
  • Replace the call to db2 with the subprocess module.
  • You'll need to import reads.py to use as a library (or you can use subprocess).

But, as Marcelo says, if you want more help- you're best off putting in some effort of your own to ask direct questions.

Discussions

Automatically converting (most of?) n bash scripts to Python?
Hello people. I’ve been writing a bunch of scripts, sometimes in bash, sometimes in Python, to automate the mundane parts of my job. My management has decided they don’t want the bash anymore, so I’ve been asked to move in the direction of Python. That’s kind of cool, really. More on discuss.python.org
🌐 discuss.python.org
0
0
June 21, 2024
bash - How to convert shell script into python? - Stack Overflow
I want to convert this shell script file to python. #!/bin/bash (cd ../frontend; npm run build) for file in src/main/resources/static/*; do rm -rf "$file" done for file... More on stackoverflow.com
🌐 stackoverflow.com
From Bash to Python
The 2 code review is from a spaghetti bash script that I use a lot, but I can’t show it to you because there are some sensitive commands in there. Before I start to convert it to Python WITHOUT the help of an AI, do you have any suggestions? More on discuss.python.org
🌐 discuss.python.org
0
1
May 1, 2023
Is it possible to convert bash scripts into Python scripts?
Yes. Python can run shell commands as well, but a lot of things just have straight Python equivalents. More on reddit.com
🌐 r/learnpython
8
2
May 11, 2024
🌐
Medium
medium.com › zwischenzugs › bash-to-python-converter-c58580f26f6c
Bash to Python Converter | by Ian Miell | zwischenzugs | Medium
October 9, 2016 - Bash to Python Converter tl;dr Ever start a bash script, then wish you’d started it in python? Use this Docker image to convert your script. Introduction I routinely use both bash and python to …
🌐
Python.org
discuss.python.org › python help
Automatically converting (most of?) n bash scripts to Python? - Python Help - Discussions on Python.org
June 21, 2024 - Hello people. I’ve been writing a bunch of scripts, sometimes in bash, sometimes in Python, to automate the mundane parts of my job. My management has decided they don’t want the bash anymore, so I’ve been asked to mov…
🌐
CodingFleet
codingfleet.com › code-converter › bash › python
Bash to Python Converter - CodingFleet
Convert your Bash Code to Python. This exceptional AI-powered tool converts your Bash code into Python code easily, eliminating the need for manual re-coding. Save your precious time and unlock cross-platform development like never before with our converter tool.
🌐
Stack Overflow
stackoverflow.com › questions › 72331146 › how-to-convert-shell-script-into-python
bash - How to convert shell script into python? - Stack Overflow
I want to convert this shell script file to python. #!/bin/bash (cd ../frontend; npm run build) for file in src/main/resources/static/*; do rm -rf "$file" done for file...
Find elsewhere
🌐
AlgoDaily
algodaily.com › convert › bash › python
AlgoDaily - Daily coding interview questions. Full programming interview prep course and software career coaching.
Programming interview prep bootcamp with coding challenges and practice. Daily coding interview questions. Software interview prep made easy.
🌐
myByways
mybyways.com › blog › migrating-from-bash-shell-scripts-to-python
Migrating from bash shell scripts to Python | myByways
March 11, 2021 - Python has many string functions which are a lot more usable e.g. find(), index(), join(), replace(), split(), strip(), etc. a="this is a long string" echo ${#a} # 21 echo ${a:8} # "a long string" echo ${a:8:4} # "a lo" echo ${a::4} # "this" echo ${a: -6} # "string" a="this is a long string" print(len(a)) print(a[8:]) print(a[8:12]) print(a[:4]) print(a[-6:]) Check for redirection using -t e.g. ./script.sh &gt; x.txt or ./script.sh | cat.
🌐
grep Flags
zwischenzugs.com › 2016 › 08 › 29 › bash-to-python-converter
Bash to Python Converter – zwischenzugs.com
August 29, 2016 - Use this Docker image to convert your script. I routinely use both bash and python to quickly whip up tools for short and long-term uses.
🌐
Linux Questions
linuxquestions.org › questions › linux-software-2 › need-help-converting-bash-script-to-python-4175605267
Need help converting BASH script to Python
Ive been tasked to convert a bash script to python. So far, the only way I know how to do that is to wrap every statement in the bash script with a
🌐
YouTube
youtube.com › codefast
bash script to python converter online - YouTube
Download this code from https://codegive.com Title: Converting Bash Scripts to Python Online: A Step-by-Step TutorialIntroduction:Bash scripts are powerful f...
Published   January 21, 2024
Views   238
🌐
GitHub
github.com › clarity20 › bash2py
GitHub - clarity20/bash2py: The only Bash-to-python transpiler you will ever need! https://www.swag.uwaterloo.ca/bash2py/index.html
Welcome to the new home of bash2py, a software tool that translates Bash shell code into Python.
Starred by 38 users
Forked by 17 users
Languages   C 68.7% | HTML 15.9% | Yacc 6.6% | Shell 3.1% | Perl 2.6% | Makefile 2.1% | C 68.7% | HTML 15.9% | Yacc 6.6% | Shell 3.1% | Perl 2.6% | Makefile 2.1%
🌐
ResearchGate
researchgate.net › publication › 295302947_Bash2py_A_bash_to_Python_translator
Bash2py: A bash to Python translator | Request PDF
March 1, 2015 - Bash2py correctly converts most Bash into Python, but does require human intervention to handle constructs that cannot easily be automatically translated. In our experiments on real-world open source bash scripts bash2py successfully translates ...
🌐
Moran Nachum
morannachum.wordpress.com › 2020 › 03 › 22 › how-to-convert-a-python-script-to-a-shell-script
How to Convert a Python Script to a Shell Script | Moran Nachum
March 23, 2020 - Instead of putting a lot of information in your crontab command about changing directories, initializing virtual environments, and running scripts, a Shell command can do it all in one simple command. So without further ado, here is how you can turn your Python script into a Shell script:
🌐
GitHub
gist.github.com › 1583330
Convert shell script variables to python · GitHub
August 10, 2016 - Convert shell script variables to python. GitHub Gist: instantly share code, notes, and snippets.
🌐
Python Forum
python-forum.io › thread-21469.html
convert sh script to python script
October 1, 2019 - hi, i have a sh script code and need to convert it into python script. i m struggling finding the correspondant command. so here is my sh script RESPONSE=`curl -s -X GET http://192.168.8.1/api/webserver/SesTokInfo` COOKIE=`echo '$RESPONS...
🌐
PyPI
pypi.org › project › python-script-converter
python-script-converter · PyPI
Download URL: python_script_converter-1.2-py3-none-any.whl ... Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/39.0.1 requests-toolbelt/0.9.1 tqdm/4.41.0 CPython/3.7.1
      » pip install python-script-converter
    
Published   Jun 04, 2020
Version   1.2
🌐
Computer Hope
computerhope.com › forum › index.php
Convert shell script to python
May 5, 2022 - ► Convert shell script to python · User actions · Print · Help | Terms and Rules | Go Up ▲ ·
🌐
Python.org
discuss.python.org › python help
From Bash to Python - Python Help - Discussions on Python.org
May 1, 2023 - The 2 code review is from a spaghetti bash script that I use a lot, but I can’t show it to you because there are some sensitive commands in there. Before I start to convert it to Python WITHOUT the help of an AI, do you…