I have Python code like:
x = sys.argv[1]
y = sys.argv[2]
i = sofe_def(x,y)
if i == 0:
print "ERROR"
elif i == 1:
return str(some_var1)
else:
print "OOOps"
num = input("Chose beetwen {0} and {1}".format(some_var2, some_var3))
return str(num)
After I must execute this script in shell script and return string in shell variable, like:
VAR1="foo"
VAR2="bar"
RES=$(python test.py $VAR1 $VAR2)
Unfortunately it doesn't work. The way by stderr, stdout and stdin also doesn't work due to a lot of print and input() in code. So how I can resolve my issue? Thank you for answer
2 Answers 2
That isn't even valid Python code; you are using return outside of a function. You don't wan't return here, just a print statement.
x, y = sys.argv[1:3]
i = sofe_def(x,y)
if i == 0:
print >>sys.stderr, "ERROR"
elif i == 1:
print str(some_var1)
else:
print >>sys.stderr, "OOOps"
print >>sys.stderr, "Choose between {0} and {1}".format(some_var2, some_var3)
num = raw_input()
print num
(Note some other changes:
- Write your error messages to standard error, to avoid them being captured as well.
- Use
raw_input, notinput, in Python 2.
)
Then your shell
VAR1="foo"
VAR2="bar"
RES=$(python test.py "$VAR1" "$VAR2")
should work. Unless you have a good reason not to, always quote parameter expansions.
5 Comments
, in print >>sys.stderr "ERROR", print >>sys.stderr, "ERROR" and ` num =raw_input("Choose between {0} and {1}".format(some_var2, some_var3)) also output text in result, I fixed it like: print >>sys.stderr "Choose between {0} and {1}".format(some_var2, some_var3)raw_input printed its prompt to standard error; I'm probably confusing it with shell read. I was definitely confusing the print statement with Perl's printf STDERR "Ooops\n" (where no comma is allowed because Perl has nightmarish syntax).(metalearning) brando~ ❯ VAR=%(python /Users/brando/ultimate-utils/ultimate-utils-project/execute_tensorboard.py /home/miranda9/data/logs/logs_Mar06_11-15-02_jobid_0_pid_3657/tb) (metalearning) brando~ ❯ echo $VAR %(python /Users/brando/ultimate-utils/ultimate-utils-project/execute_tensorboard.py /home/miranda9/data/logs/logs_Mar06_11-15-02_jobid_0_pid_3657/tb)$(...) in bash, not %(...), though in that case I would expect some other error, not a full assignment to VAR.Just use print instead of return - you bash snippet expects result on STDOUT.
1 Comment
(metalearning) brando~ ❯ VAR=python /Users/brando/ultimate-utils/ultimate-utils-project/execute_tensorboard.py /home/miranda9/data/logs/logs_Mar06_11-15-02_jobid_0_pid_3657/tb zsh: permission denied: /Users/brando/ultimate-utils/ultimate-utils-project/execute_tensorboard.py but it doesn't work.
local_dir=$(python execute_tensorboard.py 1ドル)?