簡體   English   中英

使用python subprocess / sh作為bash包裝器的問題

[英]problems using python subprocess/sh as a bash wrapper

我正在嘗試執行以下代碼行:

subprocess.call(["java", "-cp", "/home/me/somepath/file.jar", ..., "-someflag somevalue"])

代碼失敗,我正在嘗試運行的jar為我提供了使用信息。 但是,如果我將字符串展開並將其粘貼到終端中,它就可以工作(我知道我正在正確地擴展字符串,因為sh模塊在出錯時會將其吐回給我)。 所以這是子進程或sh運行的問題。

以下是您應該如何使用它的示例:

subprocess.call(["ls", "-l"])

這是描述:

subprocess.check_call(args, *, stdin=None, stdout=None, stderr=None, shell=False)

所有調用都需要args,並且應該是一個字符串或一系列程序參數。 通常優選提供參數序列,因為它允許模塊處理任何所需的轉義和引用參數(例如,允許文件名中的空格)。 如果傳遞單個字符串,則shell必須為True(參見下文),否則字符串必須簡單地命名要執行的程序而不指定任何參數。

http://docs.python.org/2/library/subprocess.html

我不清楚我是否應該在不同的地方用標志和值分解列表中的字符串。

subprocess.call(["java", "-cp", "/home/me/somepath/file.jar", ..., "-someflag", "somevalue"])

您的原始代碼對應於

java -cp /home/me/somepath/file.jar ... "-someflag somevalue"

在殼中。

shell標志切換為true

subprocess.check_call(["java", "-cp", cp_arg, ..., "-someflag somevalue"], shell=True)

另外,提示,您可以使用split()函數拆分字符串命令:

subprocess.check_call("java -cp blah blah".split(), shell=True)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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