0

我需要 cd 到一个特定的目录来运行一个 jar 包。这就是我目前正在尝试做的事情,尽管没有成功:

subprocess.call(['cd','sales'])
subprocess.call(shlex.split("""java Autoingestion %s %s %s Sales Daily Details %s"""%                                                                         
            (self.username, self.password, self.vendor_number, self.date)))

我将如何正确 cd 进入销售文件夹并执行此脚本?

4

4 回答 4

2

你应该做

subprocess.call(["java","Autoingestion",self.username, self.password, self.vendor_number, "Sales","Daily","Details",self.date, cwd="sales")

请注意,您不应该执行 shlex.split,因为它不安全

于 2012-05-15T18:42:12.283 回答
1

一种方法是os.chdir()在创建 Java 子进程之前使用。

于 2012-05-15T18:37:38.203 回答
1

os.chdir()在第二次通话之前使用Popen(并摆脱第一次Popen通话)。

于 2012-05-15T18:39:23.413 回答
0

使用os.chdir()将当前目录更改为指定目录。

我建议你使用subprocess.Popen()而不是 subprocess.call()。如果您希望在运行 java 代码之前自己设置环境,例如设置 JAVA_PATH 等,通过设置 Popen 的 env 参数很容易。

from subprocess import Popen
from os import chdir
from os.path import exists

sales_dir = "/home/ubuntu/sales"

# Sanity check for the directory
if exists(sales_dir):
    chdir(sales_dir)

new_proces = Popen("java Autoingestion %s %s %s Sales Daily Details %s" % 
             (self.username, self.password, self.vendor_number, self.date))
于 2012-05-15T19:25:09.593 回答