Запуск команды оболочки через python - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь выполнить командную оболочку для списка файлов, поэтому я попробовал этот код

import glob
import shutil
import os


def recursListPath(path, nth = 1):
list = []
for i in range (1, nth+1):
    currentpath = path + (i * "/*")
    for name in glob.glob(currentpath):
        list.append(name)
return list

version = "SPIRIT/1685-2009"
DirPath = "D:\\all-data"
list = recursListPath(DirPath, 4)
for item in list:
   if os.path.isfile(item):
      fichier=open(item, encoding="mbcs")
      for ligne in fichier :
        if version in ligne:
           print("'%s' 2009" % fichier.name)
           os.system("'%s' start C:\> script.sh -file textVersionChange.tcl -w wk -log convertversion.log -args" %fichier.name "converteddir" )
      fichier.close()

Консоль запускается для каждого файла, но ничего не генерируется, как использовать переменную в них.команда с os.system?

1 Ответ

0 голосов
/ 12 июня 2019

Это на самом деле не проблема os.system. Я предвосхищу это, сказав, что я не работаю с Windows, и я предполагаю, что ваша фактическая командная строка верна? (C:\> выглядит немного странно для меня)

Я должен сказать, что я не совсем уверен, как это: "'%s' start C:\> script.sh -file textVersionChange.tcl -w wk -log convertversion.log -args" %fichier.name "converteddir" не возвращает синтаксическую ошибку.

Я не совсем уверен, как вы хотите, чтобы эта команда выглядела, но вы можете изменить форматирование строки для начала.

Попробуйте:

"'{name}' start C:\> script.sh -file textVersionChange.tcl -w wk -log convertversion.log -args converteddir".format(name=fichier.name)

Кроме того, я хотел бы рассмотреть возможность использования более нового subprocess модуля вместо os.system.

Затем вы можете указать свою командную строку в виде списка:

[fichier.name, "start", "C:\> script.sh", "-file", "textVersionChange.tcl", "-w", "wk", "-log", "convertversion.log", "-args", fichier.name, "converteddir"]

, который может включать переменные.

...