当我输入命令时,如何让Python看到终端输出的内容?
我想在macOS Sierra上的Python上运行一个程序,在自动输入命令后检查终端的输出。例如,我会在终端中编写:当我输入命令时,如何让Python看到终端输出的内容?,python,python-2.7,python-3.x,terminal,macos-sierra,Python,Python 2.7,Python 3.x,Terminal,Macos Sierra,我想在macOS Sierra上的Python上运行一个程序,在自动输入命令后检查终端的输出。例如,我会在终端中编写: $ pwd 然后终端将输出如下内容: /Users/username 如何让Python扫描终端输出并将其设置为字符串形式的变量 >>>output = (whatever Terminal outputs) >>>print (output) "/Users/username" 顺便说一句,其他论坛并没有详细解释如何在macOS中做到
$ pwd
然后终端将输出如下内容:
/Users/username
如何让Python扫描终端输出并将其设置为字符串形式的变量
>>>output = (whatever Terminal outputs)
>>>print (output)
"/Users/username"
顺便说一句,其他论坛并没有详细解释如何在macOS中做到这一点。因此,这不是任何论坛的副本。您可以通过管道将输出传输到文件并读取该文件
$ pwd > output.txt
然后读取文件并根据其内容采取进一步的操作。您可以通过管道将输出传输到文件并读取该文件
$ pwd > output.txt
然后阅读该文件并根据其内容采取进一步的措施。使用该模块,它有一些快捷方式,使事情比使用Popen
更简单、更简单
>>> import subprocess
>>> output = subprocess.check_output("pwd")
>>> print(output)
b'L:\\\r\n'
如果愿意,可以使用output.decode(“UTF-8”)
对其进行解码,也可以使用universal\u newlines
关键字参数自动完成此操作,并对新行进行排序
>>> subprocess.check_output("pwd", universal_newlines=True)
'L:\\\n'
编辑:通过合理的建议,传递所有参数,您可以执行以下操作:
subprocess.check_output(["ls", "-l"])
或者,如果您有一个来自其他地方的字符串,您可以调用.split()
,它将生成一个由空格分隔的子字符串列表
subprocess.check_output("ls -l /".split())
注意:我在Windows上使用Python3,因此我有\r\n
行结尾和pwd
使用该模块,它有一些快捷方式,使事情比使用Popen
更简单
>>> import subprocess
>>> output = subprocess.check_output("pwd")
>>> print(output)
b'L:\\\r\n'
如果愿意,可以使用output.decode(“UTF-8”)
对其进行解码,也可以使用universal\u newlines
关键字参数自动完成此操作,并对新行进行排序
>>> subprocess.check_output("pwd", universal_newlines=True)
'L:\\\n'
编辑:通过合理的建议,传递所有参数,您可以执行以下操作:
subprocess.check_output(["ls", "-l"])
或者,如果您有一个来自其他地方的字符串,您可以调用.split()
,它将生成一个由空格分隔的子字符串列表
subprocess.check_output("ls -l /".split())
注意:我在Windows上使用Python3,因此我有
\r\n
行结尾和pwd您可以使用sys.stdout
操作stdout
。可能的重复。您是否试图从Python脚本中运行pwd
?(在这种特定情况下,os.getcwd()
是您想要的。)或者您想要挂接shell吗?或者Terminal.app?如果你能描述一下你到底想做什么会有帮助。。。我怀疑这是一个X-Y问题。您可以使用sys.stdout
操作stdout
。您是否试图从Python脚本中运行pwd
?(在这种特定情况下,os.getcwd()
是您想要的。)或者您想要挂接shell吗?或者Terminal.app?如果你能描述一下你到底想做什么会有帮助。。。我怀疑这是一个X-Y问题。哇,这种方式实际上帮助很大,谢谢!顺便问一下,你能投票支持我的问题吗?因为我猜当人们不能像你那样充分回答问题时,他们会不喜欢这些问题。哇,这种方式实际上很有帮助,谢谢!顺便问一下,你能投票支持我的问题吗?因为我猜当人们不能像你那样充分回答问题时,他们不喜欢这些问题。它适用于“pwd”,但不适用于“ls/Applications”或“sudo pwd”。我能做些什么来解决这个问题?您可以尝试向函数调用添加shell=True
。但是也有,所以你应该确保你对输入进行消毒。作为一个替代代码> shell = true,考虑把你的参数作为一个列表。代码>子流程。检查输出([“sudo”,“pwd]”)
。这是一种更干净、更安全的调用shell的方法。它适用于“pwd”,但不适用于“ls/Applications”或“sudo pwd”。我能做些什么来解决这个问题?您可以尝试向函数调用添加shell=True
。但是也有,所以你应该确保你对输入进行消毒。作为一个替代代码> shell = true,考虑把你的参数作为一个列表。代码>子流程。检查输出([“sudo”,“pwd]”)。这是一种更干净、更安全的调用shell的方法。