os.system не записывает результат в выходной файл

Я пишу этот фрагмент кода:

import os
os.system("start /wait cmd /c dir/s *.exe > Allexe1.txt")

Что он должен сделать, так это получить все exe-файлы и записать результат в файл. Но получаю пустой файл.

Примечание: я пробовал подпроцесс для того же и всегда получаю сообщение об ошибке Ошибка [2]: файл не найден. Я использую Windows 7, python2.7.

Любая помощь приветствуется.


person ggorantl    schedule 08.09.2014    source источник
comment
У вас действительно есть dir/s без места?   -  person John Zwinck    schedule 08.09.2014
comment
Да, Джон, это команда, которая работала в cmd, когда я тестировал. Я пытаюсь встроить это в python os.system   -  person ggorantl    schedule 08.09.2014


Ответы (3)


Вы сможете сделать это по-своему с этим изменением, поскольку start /wait cmd /c не требуется для выполнения команды через os.system:

import os
os.system("dir/s *.exe > Allexe1.txt")

Однако это не переносимый код, если вы собирались перенести его на платформу, отличную от Windows.

Если вы хотите сделать это более портативным способом, я рекомендую вам прочитать этот вопрос / ответ < / а>

import sys,os

root = "/home/patate/directory/"

for path, subdirs, files in os.walk(root):
    for name in files:
        # filter for files with an exe extension here
        print os.path.join(path, name)
person Michael Petch    schedule 08.09.2014

Вы не должны таким образом перечислять файлы в Python. Вместо этого используйте включенный модуль glob:

import glob
for filename in glob.glob('*.exe'):
    print filename

Или, поскольку вам кажется, что вам нужны все подкаталоги, используйте os.walk() в сочетании с fnmatch, как указано в glob документах. В любом случае не стоит за это раскошеливаться.

https://docs.python.org/2/library/glob.html

person John Zwinck    schedule 08.09.2014

Попробуй это

 import os

 result = os.popen("start /wait cmd /c dir/s *.exe > Allexe1.txt").read()
 if result is not None:
     #this is your object with all your results
     #you can write to a file
     with open('output.txt', 'w') as f:
         f.write(result)
 #you can also print the result to console.
     print result
 else:
     print "Command returned nothing"
person Zuko    schedule 08.09.2014
comment
Я не уверен насчет вашей команды, но убедитесь, что ваша команда верна - person Zuko; 08.09.2014
comment
Команда исключила бы проблемный start /wait cmd /c и удалила бы перенаправление > Allexe1.txt, чтобы был вывод для захвата. - person Michael Petch; 08.09.2014