when tying to execute multi line code through the -c option of the python interpreter itself, i have not gotten anything to work. is this suppose to even be able to work? i have gotten it to work using the exec() function by giving it a multi line string so my code, at first, looks like one statement. is there a better way?
It works for me
Output:
λ python3 -c $'print("foo")\nprint("bar")'
foo
bar
$ python3 -c 'print("foo"); print("bar")'
foo
bar
Works here too. Python 3.6
The challenge was to execute multi line code.
It's not a challenge.
Just like echo command if you don't close the quotes you can write as many lines as you want:
$ python3 -c "import requests
from bs4 import BeautifulSoup
html = requests.get('http://python-forum.io').content
soup = BeautifulSoup(html, 'lxml')
print('\n', soup.title.text, '\n')"
Python Forum
playing around with this some more i find the ; is not acting like a newline because it does not handle indentation normally and it cannot handle 2 or more in a row.
it come down to what is being given to python by the shell. it needs to get the newline as one byte with the newline code, not two bytes with \ and n which is what you often get when you type \ and n (there are a couple exceptions).
You can use a shell variable with a here document
#!/bin/bash
read -r -d '' variable <<'EOF'
import sys
def hi():
print('hello world')
hi()
EOF
python3 -c "$variable"
The advantage of here documents is that you don't have to worry about quotes and double quotes.