当前位置:  开发笔记 > 编程语言 > 正文

在Python中,我如何使用subprocess而不是os.system?

如何解决《在Python中,我如何使用subprocess而不是os.system?》经验,为你挑选了1个好方法。

我有一个调用各种参数的可执行程序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,上面的代码将如何?



1> Carlos Rendo..:
import subprocess
p=subprocess.Popen(args, stdout=subprocess.PIPE)
print p.communicate()[0]

它看起来几乎一样.但路径不应该是"无论路径是什么".因为这给了我一个错误.你想要"带有转义反斜杠的路径"或"r'the path而不转义".

args的形式也应该是['-arg','args']而不是['arg argsval'].

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有