将“Ctrl-A”放在Python shell脚本中

时间:2011-07-12 17:40:11

标签: python shell gnu-screen

我正在尝试用Python编写一个shell脚本来自动化一个进程,但我必须使用的一个命令是 Ctrl + A (我是使用屏幕)。有没有办法将其编码到脚本中?

5 个答案:

答案 0 :(得分:1)

没有。您将无法使用在其中运行的 python 程序/脚本来控制screen程序。

答案 1 :(得分:1)

在bash脚本中,我可以执行以下操作:

if [-n "$STY"]; then
    screen -X command
fi

这是屏幕设置$ STY,看看它是否设置为确定你是否在屏幕上。然后使用屏幕的-X标志发送您想要的命令。您可以在Python中轻松完成相同的操作。

实际上,如果不在屏幕上,screen -X command似乎只是默默地发生错误,所以您甚至可以在不检查$STY

的情况下使用它

Gnu-Screen: Run script that sends commands to the screen session it is being run in

答案 2 :(得分:0)

Python curses模块可以帮助你解决一些问题。 :)

答案 3 :(得分:0)

好的,这将是棘手的。正如Pablo Santa Cruz评论的那样,你的脚本在的屏幕会话中运行,所以正常的stdin / stdout / stderr界面与世界不起作用,因为屏幕没有正在监听Ctrl- A在任何这些句柄上。

但并非一切都没有丢失。屏幕 它的标准输出上监听Ctrl-A,这就是键盘的Ctrl-A到达你的方式。 (以下假设Linux,但我很确定其他Unices有类似的东西......)首先,你的脚本需要弄清楚它的父屏幕会话的pid(psutil库可能有帮助)。 然后,您将发现/proc/{pid}/fd目录包含与进程已打开的所有文件句柄的文件名相对应的文件。对于正常的unix进程,'0'是stdin,'1'是stdout,'2'是stderr。假设有适当的用户权限,您的脚本应该能够打开/proc/{pid}/fd/0并将Ctrl-A写入文件,模拟用户按下该键。

我不确定这是否会工作,以前从未尝试过,但是如果你必须从子进程中命令屏幕,那么它的一些变体可能是你最好的选择。

答案 4 :(得分:0)

CTRL_A的ASCII代码为1。 所以下面的python代码将起作用。

    CTRL_A = chr(1)