我有一个调用各种参数的可执行程序Python脚本(在这个例子中,它是"sqlpubwiz.exe",这是"Microsoft SQL Server数据库发布向导"):
import os sqlpubwiz = r'"C:\Program Files\Microsoft SQL Server\90\Tools\Publishing\sqlpubwiz.exe"' server = 'myLocalServer' database = 'myLocalDatabase' connection_values = ['server=' + server, 'database=' + database, 'trusted_connection=true'] connection_string = ';'.join(connection_values) dbms_version = '2000' sqlscript_filename = 'CreateSchema.sql' args = [ sqlpubwiz, 'script', '-C ' + connection_string, sqlscript_filename, '-schemaonly', '-targetserver ' + dbms_version, '-f', ] cmd = ' '.join(args) os.system(cmd)
这段代码运行正常,但我想养成使用子进程的习惯,因为它打算替换os.system.但是,经过几次尝试失败后,我似乎无法正常工作.
如果转换为使用子进程代替os.system,上面的代码将如何?
import subprocess p=subprocess.Popen(args, stdout=subprocess.PIPE) print p.communicate()[0]
它看起来几乎一样.但路径不应该是"无论路径是什么".因为这给了我一个错误.你想要"带有转义反斜杠的路径"或"r'the path而不转义".
args的形式也应该是['-arg','args']而不是['arg argsval'].