Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否可以只启动和记录bash会话的输入?_Python_Linux_Shell - Fatal编程技术网

Python 是否可以只启动和记录bash会话的输入?

Python 是否可以只启动和记录bash会话的输入?,python,linux,shell,Python,Linux,Shell,我正在努力实现以下目标: 让python脚本启动shell。用户将该shell用于他需要的任何目的。关闭shell之后,python脚本可以使用一个只包含输入命令的日志进行解析 我所得到的只是通过popen和类似工具调用shell的方法,但这并不是我所需要的。最简单的方法是使用。此外,它附带的示例包括 开箱即用的行为类似于UNIX脚本命令(同时记录stdin和stdout),但只需要一行更改即可完成您想要的操作: 将p.logfile=fout更改为p.logfile\u send=fout,您

我正在努力实现以下目标:

让python脚本启动shell。用户将该shell用于他需要的任何目的。关闭shell之后,python脚本可以使用一个只包含输入命令的日志进行解析


我所得到的只是通过popen和类似工具调用shell的方法,但这并不是我所需要的。

最简单的方法是使用。此外,它附带的示例包括 开箱即用的行为类似于UNIX
脚本
命令(同时记录stdin和stdout),但只需要一行更改即可完成您想要的操作:


p.logfile=fout
更改为
p.logfile\u send=fout
,您将只记录发送到远程进程的数据;或者,您可以将其设置为
p.logfile_recv=fout
,并且只记录该进程接收到的数据。

最简单的方法是使用。此外,它附带的示例包括 开箱即用的行为类似于UNIX
脚本
命令(同时记录stdin和stdout),但只需要一行更改即可完成您想要的操作:


p.logfile=fout
更改为
p.logfile\u send=fout
,您将只记录发送到远程进程的数据;或者,您可以将其设置为
p.logfile_recv=fout
,并且只记录该进程接收到的数据。

您需要该shell具有多大的真实性?如果它不需要stdin成为真正的TTY,那么这是非常简单的(
stdin=PIPE
,让您的Python代码读取stdin,记录它,然后将它发送到管道,就可以了)。如果你真的需要stdin成为一个真正的TTY,我可能会使用pexpect来完成这项工作(并鼓励你在真正尝试使用上述工具后回来问一个更具体的问题)。顺便说一句,pexpect常见问题解答的“为什么不使用管道?”部分详细介绍了“不需要stdin成为一个真正的TTY”的限制case@CharlesDuffy它需要是一个实际的shell。我正在尝试制作一个python脚本来记录输入命令,并使用它们创建各种脚本库……我的意思是,
bash
的副本是一个“真正的shell”,即使它的stdin不是TTY;有些行为有点不正常。无论如何,如果你使用我的答案,你的子进程认为它有一个TTY,所以它工作完全正常。(也就是说,我不确定你所做的一定会按照你的意愿工作——当stdin在不同的程序之间传递时,时间可能会产生影响:重播太快,错误的程序可能会消耗内容).你需要多逼真的外壳?如果它不需要stdin成为真正的TTY,那么这是非常简单的(
stdin=PIPE
,让您的Python代码读取stdin,记录它,然后将它发送到管道,就可以了)。如果你真的需要stdin成为一个真正的TTY,我可能会使用pexpect来完成这项工作(并鼓励你在真正尝试使用上述工具后回来问一个更具体的问题)。顺便说一句,pexpect常见问题解答的“为什么不使用管道?”部分详细介绍了“不需要stdin成为一个真正的TTY”的限制case@CharlesDuffy它需要是一个实际的shell。我正在尝试制作一个python脚本来记录输入命令,并使用它们创建各种脚本库……我的意思是,
bash
的副本是一个“真正的shell”,即使它的stdin不是TTY;有些行为有点不正常。无论如何,如果你使用我的答案,你的子进程认为它有一个TTY,所以它工作完全正常。(也就是说,我不确定你所做的一定会按照你的意愿工作——当stdin在不同的程序之间传递时,时间可能会产生影响:回放太快,错误的程序可能会消耗内容)。