如何在Linux终端中输入指向文件路径的字符串子流程调用命令?

2024-04-25 22:26:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Ubuntu,并且一直在尝试做一个简单的自动化,它要求我在命令行列表中输入[name of website]和[file path]。我正在使用子进程和调用函数。我尝试了一些更简单的方法,首先使用“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”上作为无效语法传递。有人能给我指出正确的方向吗?你知道吗


Tags: pathtextnamefromimport命令列表input
2条回答

下面是一个完整的示例,说明如何使用subprocess.call调用可执行python文件,使用argparse正确解析输入。你知道吗

要调用的python文件(沙盒argparse.py):

import argparse    
parser = argparse.ArgumentParser()

parser.add_argument(" filePath", help="Just A test", dest='filePath')
parser.add_argument(" siteName", help="Just A test", dest='siteName')
args = parser.parse_args()
print args.siteName
print args.filePath

调用python文件:

from subprocess import call


call(["python","/users/dev/python/sandboxArgParse.py", " filePath", "abcd.txt", " siteName", "www.google.com"])

不能对元组使用%。你知道吗

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

你可能是说

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

但是"%s" % string显然只返回string,所以这里不需要使用格式。你知道吗

("ls", text)

这仍然没有任何用处;您是否忘记了call?你知道吗

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)。你知道吗

如果您正在编写新的脚本,那么您肯定应该认真地考虑针对python3的问题(在这种情况下,您希望转向subprocess.run()input(),而不是raw_input())。Python2已经过了它最初宣布的终止日期,尽管它被推迟了几年,因为Py3k的采用在几年前仍然很慢。它不再是,也不应该是你想在Py3,那是未来的所在。你知道吗

相关问题 更多 >