Python 为子流程模块提供输入

Python 为子流程模块提供输入,python,ubuntu-14.04,Python,Ubuntu 14.04,我试图用“gnome屏幕保护程序命令”锁定ubuntu服务器的屏幕,然后按enter键解锁。当我手动操作时,它工作得很好,因此考虑使用Python子流程模块将其自动化 我面临的问题是,它锁定了屏幕,并且在计时器到期后,回车键不会出现(“echo-ne\n”,知道可以通过CLI发送回车) 下面是代码片段 import subprocess import time cmd = subprocess.call(["/usr/bin/gnome-screensaver-command", "-l"]

我试图用“gnome屏幕保护程序命令”锁定ubuntu服务器的屏幕,然后按enter键解锁。当我手动操作时,它工作得很好,因此考虑使用Python子流程模块将其自动化

我面临的问题是,它锁定了屏幕,并且在计时器到期后,回车键不会出现(“echo-ne\n”,知道可以通过CLI发送回车)

下面是代码片段

import subprocess
import time


cmd = subprocess.call(["/usr/bin/gnome-screensaver-command", "-l"])
time.sleep(10)
subprocess.call(["echo", "-ne", "\n"])
尝试了另一种方法:

#******THIS METHOD IS NOT LOCKING THE SCREEN AT ALL*******

cmd = subprocess.Popen(["/usr/bin/gnome-screensaver-command", "-l"], stdin = subprocess.PIPE, shell=True)
time.sleep(10)
cmd.communicate(input="\n")

根据我的要求,应该怎么做才能工作?

问题是屏幕保护程序读取键盘,但不是通过过程标准输入

将键盘事件发送到桌面(可能)是可行的。有一些程序(如Windows上的
caffee
)可以防止屏幕保护程序被激活,但让我提出一种不涉及键盘事件的便携式替代方案:

  • 运行进程
  • 等10秒钟
  • 终止屏幕保护程序进程
像这样:

import subprocess
import time


cmd = subprocess.Popen(["/usr/bin/gnome-screensaver-command", "-l"])
time.sleep(10)
cmd.terminate()

问题是屏幕保护程序读取键盘,但不是通过标准输入过程读取

将键盘事件发送到桌面(可能)是可行的。有一些程序(如Windows上的
caffee
)可以防止屏幕保护程序被激活,但让我提出一种不涉及键盘事件的便携式替代方案:

  • 运行进程
  • 等10秒钟
  • 终止屏幕保护程序进程
像这样:

import subprocess
import time


cmd = subprocess.Popen(["/usr/bin/gnome-screensaver-command", "-l"])
time.sleep(10)
cmd.terminate()

正如您所建议的那样,进程不会因terminate而终止。arg。。。烦人的脚本是否结束或保持不变?请尝试将
cmd.terminate()
替换为
os.kill(cmd.pid)
。但是我没有什么希望。真的:
os.kill(pid,signal.SIGKILL)
。让我们来看看。进程不会像您建议的那样被终止终止。arg。。。烦人的脚本是否结束或保持不变?请尝试将
cmd.terminate()
替换为
os.kill(cmd.pid)
。但是我没有什么希望。真的:
os.kill(pid,signal.SIGKILL)
。让我们。