python - 如何使用 subprocess.call 命令在 Linux 终端中输入指向文件路径的字符串?

标签 python linux subprocess

我正在使用 Ubuntu 并且一直在尝试做一个简单的自动化,这需要我将 [网站名称] 和 [文件路径] 输入到命令行列表中。我正在使用子进程和调用函数。我首先使用“ls”命令尝试了一些更简单的方法。

from subprocess import call
text = raw_input("> ")
("ls", "%s") % (text)

这些返回为“buffsize 必须是一个整数”。我试图找出它是什么,显然我必须将命令作为列表传递。所以我尝试在我尝试编码的主要事情上这样做。

from subprocess import call
file_path = raw_input("> ")
site_name = raw_input("> ")
call("thug", -FZM -W "%s" -n "%s") % (site_name, file_path) 

这些在第一个“%s”上作为无效语法传递。谁能指出我正确的方向?

最佳答案

您不能在元组上使用 %

("ls", "%s") % text   # Broken

你可能是说

("ls", "%s" % text)

但是 "%s"% string 显然会返回简单的 string,所以这里不需要使用格式化。

("ls", text)

这仍然没有任何用处;你忘记了调用吗?

call 的参数中也不能有未加引号的字符串。

call("thug", -FZM -W "%s" -n "%s") % (site_name, file_path)  # broken

需要引用 -FZM-W ,而且,如果您使用格式字符串,则格式需要与格式字符串相邻。

call(["thug", "-FZM", "-W", site_name, "-n", file_path])

还要注意 call() 的第一个参数是一个正确的列表,还是一个长字符串(在这种情况下你需要 shell=True,你想要 avoid if you can )。

如果您正在编写新脚本,您绝对应该认真考虑以 Python 3 为目标(在这种情况下,您希望转向 subprocess.run()input() 而不是 raw_input()。 Python 2 已经过了最初宣布的生命周期结束日期,尽管它被推迟了几年,因为几年前 Py3k 的采用仍然很缓慢。它不再是,也不应该是——你想在 Py3 中,这就是 future 所在。

关于python - 如何使用 subprocess.call 命令在 Linux 终端中输入指向文件路径的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47522743/

相关文章:

c++ - 我如何获得与打开它们的应用程序关联的端口?

Python 子进程 : Command Fails in Python but Works in Shell

Python 字符串作为子进程的文件参数

c - 无效的读/写有时会产生段错误,有时不会

python - 为什么列表中的第一个图没有绘制,但最后却有一个空图?

python - 使用 Python 查找两个文本文件的段落中的重复关键字,并在新的文本文件中列出结果(比较它们)

python - 我似乎无法在 python 中处理来自 regex(re.search) 的空白结果,我要么得到重复结果,要么没有结果?

c++ - #include <CEGUI/RendererModules/Ogre/CEGUIOgreRenderer.h> 没有正确包含 ogre 头文件

cocoa - 在 Cocoa 中将 stdout 重定向到 NSTextView 的最佳方法是什么?

python - 'tuple'对象没有属性 'clip'