更改os.system中的目录

时间:2014-06-18 13:55:07

标签: python os.system

我应该如何使用os.system为多个目录运行脚本。 我试过这个:

listofdirnumbers = [1, 2, 3, 4, 5]
for i in range(len(listofdirnumbers)):
    os.system("script.py 'arg1 "mydir_%d"%i arg2 '")

但它给了我无效语法的错误。

如果我想输入几个参数,它是如何工作的另一个问题 - 这是正确的吗?

(os.system("script.py 'arg1 arg2 arg3'"))

2 个答案:

答案 0 :(得分:0)

您希望执行的命令(包括参数)应作为字符串传递。在Python中没有像"script.py 'arg1 "mydir_%d"%i arg2 '"这样的嵌套字符串这样的概念。

listofdirnumbers = [1, 2, 3, 4, 5]
for i in range(len(listofdirnumbers)):
    os.system("script.py arg1 mydir_%d arg2" % i)

可以像

一样传递多个参数
os.system("script.py arg1 arg2 arg3")

答案 1 :(得分:0)

问题是双引号字符串中的双引号。你可能想写一些类似的东西:

os.system("""script.py 'arg1 "mydir_%d" arg2 '""" % i)

或者,转义双引号:

os.system("script.py 'arg1 \"mydir_%d\" arg2 '" % i)

即使双引号在这种情况下实际上是无用的......

我真的不知道为什么要在该命令中添加单引号。单引号分隔的字符串将被视为单个参数。在示例script.py中,将收到arg1 "my_dir_N" arg2形式的一个参数,其中N是一个整数。如果你想将多个参数传递给程序不要用单引号将它们分组。

此外,您应该完全避免 os.systemsubprocess模块提供了更多更安全的和更灵活的界面。 使用subprocess的代码为:

import subprocess

for i in listofdirnumbers:
    subprocess.call(['script.py', 'arg1', 'my_dir_%d' % i, 'arg2'])

(这将为script.py提供三个参数)。