我应该如何使用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'"))
答案 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.system
。 subprocess
模块提供了更多更安全的和更灵活的界面。
使用subprocess
的代码为:
import subprocess
for i in listofdirnumbers:
subprocess.call(['script.py', 'arg1', 'my_dir_%d' % i, 'arg2'])
(这将为script.py
提供三个参数)。