подпроцесс python dd и stdout - PullRequest
2 голосов
/ 28 сентября 2011

Я использую подпроцесс для создания случайного файла из / dev / random с использованием unix dd. Теперь, если я хочу, чтобы вывод данных dd был записан в файл вместо stdout. так вот код, который я использую,

import subprocess
out_fd = open('test_file','w')
def os_system_dd():
   global out_fd
   out_fd.write("executing the time dd command\n")
   cmd_list = ['time','dd','if=/dev/random', 'of=/home/anand/sys_entropy_random', 'bs=1M' ,'count=5']
   a = subprocess.Popen(cmd_list,stdout=out_fd)
   a.wait()

if __name__ == '__main__':
   os_system_dd()

Это не выводит вывод dd в файл, а печатает его в стандартный вывод. Это специфическая функциональность команды dd? Или я что-то упускаю из-за того, как работает подпроцесс?

Ответы [ 2 ]

3 голосов
/ 28 сентября 2011

dd выводит отладочную информацию на stderr, а не на stdout:

import subprocess
out_fd = open('test_file','w')
def os_system_dd():
   out_fd.write("executing the time dd command\n")
   cmd_list = ['time','dd','if=/dev/random', 'of=/home/anand/sys_entropy_random',
                           'bs=1M' ,'count=5']
   a = subprocess.Popen(cmd_list,stderr=out_fd) # notice stderr
   a.communicate()

if __name__ == '__main__':
   os_system_dd()
2 голосов
/ 28 сентября 2011

Причина, по которой ничего не записывается в файл, заключается в том, что он записан в stderr. Перенаправьте stderr, и вы получите результат.

import subprocess
out_fd = open('test_file','w')
def os_system_dd():
   global out_fd
   out_fd.write("executing the time dd command\n")
   cmd_list = ['date'] #Your list
   a = subprocess.Popen(cmd_list,stdout=out_fd, stderr=out_fd)
   a.wait()

if __name__ == '__main__':
   os_system_dd()

Кроме того, очистите буфер после записи «выполнение времени ...»

...