Bash脚本:打开Python,执行一些行,然后让用户控制

时间:2018-03-30 09:11:08

标签: python bash

我有一个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>
>>> 

2 个答案:

答案 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;打印系统版本信息。

enter image description here

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()"