我需要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)))
我如何正确地进入sales文件夹并执行此脚本?
答案 0 :(得分:2)
你应该做
subprocess.call(["java","Autoingestion",self.username, self.password, self.vendor_number, "Sales","Daily","Details",self.date, cwd="sales")
请注意,您不应该执行shlex.split,因为它不安全
答案 1 :(得分:1)
一种方法是在创建Java子流程之前使用os.chdir()
。
答案 2 :(得分:1)
在第二次Popen
来电之前使用os.chdir()
(并取消第一次Popen
来电)。
答案 3 :(得分: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))