假设我正在编写一个bash脚本myscript.bash,它需要一个参数($ 1)。它所做的一件事就是调用wrapped.py这个python脚本,它会提示用户输入四个输入。我想自动为这些输入中的第一个提交1美元,然后让用户正常提示其余输入。
我该怎么做?我尝试echo $1 | wrapped.py < /dev/stdin
,但是这会为wrapped.py请求的第二个输入提交EOF,从而导致Python EOFError。如果我回显-e“$ 1 \ na \ nb \ nc”,即回显所有四个输入,它确实有效......但我希望用户被提示输入其他三个。我可以为Python脚本编写一个完整的包装器,但这会产生维护问题,因为对wrapped.py的更新可以例如添加第五个问题。
这是实际错误的样子:
$ echo 'test_app' | django-startproject.py test_app tmp < /dev/stdin
Project name [PROJECT]: Project author [Lincoln Loop]: Traceback (most recent call last):
File "/usr/local/bin/django-startproject.py", line 7, in <module>
execfile(__file__)
File "/home/rich/src/ll-django-startproject/bin/django-startproject.py", line 9, in <module>
main()
File "/home/rich/src/ll-django-startproject/bin/django-startproject.py", line 5, in main
start_project()
File "/home/rich/src/ll-django-startproject/django_startproject/management.py", line 44, in start_project
value = raw_input(prompt) or default
EOFError: EOF when reading a line
答案 0 :(得分:1)
简单方法:
(echo "$1"; cat) | rest of the pipe here
这种方法的缺点是管道的其余部分将输入视为管道,并且往往会丢失大多数漂亮的“交互”属性。然后,这取决于你的脚本。
对于任何更有趣的东西,你应该研究expect
。
答案 1 :(得分:0)
您可以设置以下内容:
您的bash脚本
#!/bin/sh
./test.py $1
和python脚本
#!/usr/bin/python
import sys
print("In py script now")
for i in sys.argv:
print i
print raw_input('What day is it? ')
print raw_input('What date is it? ')
print raw_input('What month is it? ')
print ("Exiting py script")
像这样跑
./myscript.bash abc
输出
In py script now
./test.py
abc
What day is it? 65
65
What date is it? 98
98
What month is it? 14
14
Exiting py script