【问题标题】:How to supply raw_input to a python program running on a terminal window in linux from a different terminal, all running on same UNIX如何从不同的终端向在 linux 的终端窗口上运行的 python 程序提供 raw_input,所有这些程序都在同一个 UNIX 上运行
【发布时间】:2015-08-03 23:25:54
【问题描述】:

我在 unix 系统中打开了 2 个终端。 在一个终端上,我运行了一个接受 raw_input 的 python 程序,我想从另一个没有运行这个 python 程序的终端提供这个 raw_input。

我试过类似的东西:

回声 3 > /dev/pts/172

但这只是在终端上打印数字 3,并没有真正实现从键盘输入“3”和 ENTER 键的功能

终端1是/dev/pts/252,终端运行python程序是/dev/pts/172

【问题讨论】:

  • 这里有一些东西可以尝试。使用 ps auxww|grep script_name 查找正在运行的 python 脚本的 pid,或者让脚本在开始使用 os.getpid() 时将其打印出来。脚本的标准输入应位于 /proc/script_PID/fd/0。使用 exec 1 > /proc/script_PID/fd/0 将另一个终端的输出重定向到此文件。现在在另一个终端中的 echo hello run 将转到正在运行的脚本的输入。您也可以在其他脚本中运行 echo hello > /proc/script_PID/fd/0 ,但这需要在要输入到其他脚本的每一行中添加 '> /proc/script_PID/fd/0 '。

标签: python linux unix terminal


【解决方案1】:

如果想法是远程输入程序,一个相当流行的解决方案是不使用stdin 进行输入,而是打开一个pipe,让程序监听管道。然后,您可以在另一个程序中打开管道,并向其发送数据。如果你使用named pipes,你甚至可以echo到管道。

将数据发送到另一个终端的stdin(因此,发送到 raw_input)显然是一个危险的想法,因为这将允许在其他人的终端中执行命令。

定向到 /proc/script_PID/fd/0 将不起作用 - 这与 /dev/pts/ 中的同一设备相关联。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 2011-12-30
    相关资源
    最近更新 更多