Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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看到终端输出的内容?_Python_Python 2.7_Python 3.x_Terminal_Macos Sierra - Fatal编程技术网

当我输入命令时,如何让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中做到

我想在macOS Sierra上的Python上运行一个程序,在自动输入命令后检查终端的输出。例如,我会在终端中编写:

$ 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的方法。