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