我有一个Python程序A.py,它在完成后创建二进制数据。为了帮助用户分析输出,我想将一个小脚本B.sh添加到输出目录中,该目录触发Python控制台并执行一些命令C,它们加载数据并准备它们以便用户看到是什么可用。执行C后,脚本B.sh应该保持Python控制台处于打开状态。
首次尝试B.sh:
我想出了
#!/bin/sh
xterm -e python
打开一个Python控制台并保持打开,但不会在该控制台中执行任何操作。
B.sh的第二次尝试:
我想出了
#!/bin/sh
xterm -e python -i C.py
执行C.py(我不想为启动命令编写额外的文件,但我可以忍受它)并保持窗口打开,但不显示已完成的操作。更具体地说,将向用户呈现C的输出,但不是用于实现输出的命令。 相反,我希望向用户呈现如下控制台:
>>> [info,results] = my_package.load(<tag>)
>>> my_package.plot(results)
>>> print(info)
<output>
>>> my_package.analyze(results)
<output>
>>>
答案 0 :(得分:2)
将其保存在名为demo.tcl
#!/usr/local/bin/expect -f
# Spawn Python and await prompt
spawn /usr/local/bin/python3
expect ">>>"
# Send Python statement and await prompt
send "print('Hello world!')\n"
expect ">>>"
# Pass control to user so he can interact with Python
interact
然后使用以下命令使其可执行:
chmod +x demo.tcl
运行:
xterm -e ./demo.tcl
在图片中,您可以看到我继续了#34; Hello world&#34;打印系统版本信息。
Python 和期望的路径可能不同,因此请检查并更改以适应。
对于碰巧使用macOS(a.k.a.OSX)的任何人,您可以使用自制程序安装expect
,如下所示:
brew install expect
而且,由于Macs不再使用X11,而不是安装XQuartz并运行xterm
,您可以启动一个新的终端并在那里运行Python非常简单:
open -a Terminal.app demo.tcl
答案 1 :(得分:0)
正如用户@pask所建议的那样,我只是在执行命令之前打印它们。
此外,我添加了-c
开关,以便能够将Python命令直接放在B.sh
中,而不必编写文件C.py
以下是我现在使用的B.sh
:
#!/bin/sh
xterm -e python -i -c "print('>>> import my_package');import my_package;print('>>> [info,results] = my_package.load()');[info,results] = my_package.load()"