[英]How do I input strings in Linux terminal that points to file path using subprocess.call command?
我正在使用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”上作為無效語法傳遞。 誰能指出我正確的方向?
這里是你將如何調用一個可執行文件的Python一個完整的例子subprocess.call
使用argparse
正確解析輸入。
您要調用的python文件(sandboxArgParse.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
, 如果可以的話 ,應避免使用 )。
如果你正在寫新的劇本,你最絕對應該認真考慮靶向Python 3中(在這種情況下,你要轉動到subprocess.run()
和input()
代替raw_input()
太)。 Python 2已經過了最初宣布的壽命終止日期,盡管由於幾年前Py3k的采用仍然很慢,所以它被推遲了幾年。 它不再是而且不應該-您想進入Py3,那就是未來。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.