簡體   English   中英

如何在Linux終端中使用subprocess.call命令輸入指向文件路徑的字符串?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM