FYI, subprocess
имеет функцию list2cmdline()
, которая позволит вам увидеть строку, которую будет использовать Popen
.
Ваша версия дает:
'"C:\\Program Files\\Microsoft SQL Server\\90\\Tools\\Publishing\\sqlpubwiz.exe" script "-C server=myLocalServer;database=myLocalDatabase;trusted_connection=true" CreateSchema.sql -schemaonly "-targetserver 2000" -f'
с дополнительными кавычками около "-C server=myLocalServer;database=myLocalDatabase;trusted_connection=true"
и "-targetserver 2000"
.
Правильно отформатирован:
args = [
sqlpubwiz,
'script',
'-C', connection_string,
sqlscript_filename,
'-schemaonly',
'-targetserver', dbms_version,
'-f',
]
дает:
'"C:\\Program Files\\Microsoft SQL Server\\90\\Tools\\Publishing\\sqlpubwiz.exe" script -C server=myLocalServer;database=myLocalDatabase;trusted_connection=true CreateSchema.sql -schemaonly -targetserver 2000 -f'
Кроме того, второстепенный вопрос, но это хорошая привычка - создавать последовательности, такие как args
, которые не должны быть изменяемыми в кортежи вместо списков.