Python Bash';s echo语句使得无法捕获后续语句的命令输出
我(对我来说)陷入了一个非常奇怪的境地,因为echo语句会阻止我从后续命令中获取标准输出消息 这是我的Python Bash';s echo语句使得无法捕获后续语句的命令输出,python,bash,echo,Python,Bash,Echo,我(对我来说)陷入了一个非常奇怪的境地,因为echo语句会阻止我从后续命令中获取标准输出消息 这是我的test.py: print "Test Only" 这是我的测试。sh: start() { # Sample code to make sure that code within the if .. fi is executed if [ 1 -eq 1 ]; then echo "Start server" /usr/bin/python
test.py
:
print "Test Only"
这是我的测试。sh
:
start() {
# Sample code to make sure that code within the if .. fi is executed
if [ 1 -eq 1 ]; then
echo "Start server"
/usr/bin/python test.py
fi;
}
start
Start server
执行/bin/bash test.sh时的实际输出:
start() {
# Sample code to make sure that code within the if .. fi is executed
if [ 1 -eq 1 ]; then
echo "Start server"
/usr/bin/python test.py
fi;
}
start
Start server
预期产出:
Start server
Test Only
我的解决方案(变通方法):
start() {
# Sample code to make sure that code within the if .. fi is executed
if [ 1 -eq 1 ]; then
MSG1="Start server"
MSG2=`/usr/bin/python test.py`
echo $MSG1
echo $MSG2
fi;
}
如果我注释掉行echo“Start server”
,我可以像往常一样得到消息Test Only
我的结论是echo陈述在这里犯了一些错误。但这是我所不知道的。你能帮我理解为什么会发生这种情况吗
另一种解决方案:
start() {
# Sample code to make sure that code within the if .. fi is executed
if [ 1 -eq 1 ]; then
MSG1="Start server"
MSG2=`/usr/bin/python test.py`
echo $MSG1
echo $MSG2
fi;
}
已更新
感谢@ghoti,我已经解决了我的问题:我的代码中可能有一些不可见的字符。将它们全部消除,现在就可以工作了要捕获命令输出,请使用反勾号。例如:
captured_output=`/usr/bin/python test.py`
echo $captured_output
要捕获命令输出,请使用反勾号。例如:
captured_output=`/usr/bin/python test.py`
echo $captured_output
对我有用
ghoti@pc $ cat echotest
#!/usr/local/bin/bash
start() {
# Sample code to make sure that code within the if .. fi is executed
if [ 1 -eq 1 ]; then
echo "Start server"
/usr/local/bin/python echotest.py
fi
}
start
ghoti@pc $ cat echotest.py
print "Test only"
ghoti@pc $ ./echotest
Start server
Test only
ghoti@pc $
你的行尾可能有问题吗?您是在运行bash的操作系统中以本机方式编辑这些文件,还是从Windows设备中复制这些文件
这就是说,我建议您在开始脚本的结构上稍微有所不同。假设您的python脚本正在后台启动一些东西,您可以执行以下操作:
#!/bin/bash
start() {
# Sample code to make sure that code within the if .. fi is executed
echo -n "mydaemon "
if /usr/local/bin/python mydaemon.py; then
echo "started"
else
echo "FAILED to start"
fi
}
start
如果python脚本本身就是一个需要后台处理的守护进程,那么您无法轻松测试它的成功。你不会这样开始的。对我来说很有效
ghoti@pc $ cat echotest
#!/usr/local/bin/bash
start() {
# Sample code to make sure that code within the if .. fi is executed
if [ 1 -eq 1 ]; then
echo "Start server"
/usr/local/bin/python echotest.py
fi
}
start
ghoti@pc $ cat echotest.py
print "Test only"
ghoti@pc $ ./echotest
Start server
Test only
ghoti@pc $
你的行尾可能有问题吗?您是在运行bash的操作系统中以本机方式编辑这些文件,还是从Windows设备中复制这些文件
这就是说,我建议您在开始脚本的结构上稍微有所不同。假设您的python脚本正在后台启动一些东西,您可以执行以下操作:
#!/bin/bash
start() {
# Sample code to make sure that code within the if .. fi is executed
echo -n "mydaemon "
if /usr/local/bin/python mydaemon.py; then
echo "started"
else
echo "FAILED to start"
fi
}
start
如果python脚本本身就是一个需要后台处理的守护进程,那么您无法轻松测试它的成功。你不会这样开始的。尝试使用“/bin/echo”而不是echo(这是你的shell的echo),看看这是否有帮助?尝试使用“/bin/echo”而不是echo(这是你的shell的echo),看看这是否有帮助?嗯,我创建了这两个文件,然后运行了它,得到了预期的输出仅启动服务器\n测试
::您是否尝试颠倒这两行的顺序?“我打赌这会很有启发性的。”马金刚刚颠倒了两行的顺序,我得到了“只测试”。回声消失了:)太奇怪了。我想这不是关于bash或python,而是一个Ubuntu设置???嗯,我创建了这两个文件,然后运行它,我得到了您预期的输出Start server\nTest Only
::您尝试过颠倒这两行的顺序吗?“我打赌这会很有启发性的。”马金刚刚颠倒了两行的顺序,我得到了“只测试”。回声消失了:)太奇怪了。我想这不是关于bash或python的,而是关于Ubuntu设置的???我在Mac10.6上编码,然后在我的Ubuntu 11服务器上测试。好的。我的工作站运行FreeBSD,我管理运行FreeBSD、Ubuntu和Debian的服务器。因此,您需要调整bash和python二进制文件的位置。。。。但如果你能更好地描述你的根本目标,那么我们就能想出更好的解决方案。从长远来看,就如何以错误的方式做事征求建议是没有用的。:)哦,对不起,如果我的问题不够清楚的话。如您所见,示例代码是我用来执行后台进程的启动脚本的一部分。在执行它之前,我打印一条消息,通知我正在启动它。然后执行后台进程。如果有任何错误,后台进程可以打印出一些消息。我希望我的bash脚本能够像往常一样捕获它。但它没有得到它。我截断bash文件,从头开始编写代码,删除文件中可能意外出现的所有不可见字符。现在它是一种魅力。Thanks@pcdinh你需要点击复选标记并将其变为绿色,这样ghoti就可以获得代表,帮助你解决问题。我在Mac 10.6上进行编码,然后在我的Ubuntu 11服务器上进行测试。好的。我的工作站运行FreeBSD,我管理运行FreeBSD、Ubuntu和Debian的服务器。因此,您需要调整bash和python二进制文件的位置。。。。但如果你能更好地描述你的根本目标,那么我们就能想出更好的解决方案。从长远来看,就如何以错误的方式做事征求建议是没有用的。:)哦,对不起,如果我的问题不够清楚的话。如您所见,示例代码是我用来执行后台进程的启动脚本的一部分。在执行它之前,我打印一条消息,通知我正在启动它。然后执行后台进程。如果有任何错误,后台进程可以打印出一些消息。我希望我的bash脚本能够像往常一样捕获它。但它没有得到它。我截断bash文件,从头开始编写代码,删除文件中可能意外出现的所有不可见字符。现在它是一种魅力。Thanks@pcdinh您需要单击复选标记并将其变为绿色,以便ghoti获得代表,帮助您解决问题。