Как перенаправить вывод .exe в файл в Python?

Попробуйте строковый массив следующим образом:

<string-array name="bookImages">
    <item>android_security</item>
    <item>penetration_testing</item>
    <item>red_team</item>
    <item>lf</item>
    <item>the_art_of_exploitation</item>
    <item>web_application_hacker</item>
    <item>lbh</item>
    <item>bhp</item>
</string-array>

и адаптер так:

public class BookGrid extends BaseAdapter {
private Context context;
private LayoutInflater inflater;
private String[] imageName;
private Integer[] bookImages;

public BookGrid(Context context, String[] imageName) {
    this.context = context;
    this.imageName = imageName;
    this.inflater = LayoutInflater.from(context);

    Resources resi = context.getResources();
    String[] bookImagesFromString = resi.getStringArray(R.array.bookImages);
    bookImages = new Integer[bookImagesFromString.length];
    for (int i = 0; i < bookImagesFromString.length; i++) {
        bookImages[i] = (resi.getIdentifier(bookImagesFromString[i], "drawable", context.getPackageName()));
    }
}

@Override
public int getCount() {
    return imageName.length;
}

@Override
public Object getItem(int position) {
    return position;
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
/*
Resources rest = context.getResources();
String[] labels = rest.getStringArray(R.array.bookLabels);
System.out.println("bookImagess Tex: " + Arrays.toString(labels));
*/
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.layout_grid_image, parent, false);
    }
    TextView txtv = convertView.findViewById(R.id.gridtextView);
    ImageView imgv = convertView.findViewById(R.id.gridImageView);

    txtv.setText(imageName[position]);
    imgv.setImageResource(bookImages[position]);

    return convertView;
}
}

Надеюсь, это поможет!

17
задан 19 May 2009 в 04:03
поделиться

4 ответа

Вы можете перенаправить напрямую в файл с помощью подпроцесса.

import subprocess
with open('output.txt', 'w') as output_f:
    p = subprocess.Popen('Text/to/execute with-arg',
                         stdout=output_f,
                         stderr=output_f)
27
ответ дан 30 November 2019 в 11:27
поделиться

Вы можете сделать что-то вроде этого например, чтобы прочитать вывод ls -l (или любой другой команды)

p = subprocess.Popen(["ls","-l"],stdout=subprocess.PIPE)
print p.stdout.read() # or put it in a file

, вы можете сделать то же самое для stderr / stdin

, но, как упомянул Алекс, если вы просто хотите, чтобы это было в файле, просто перенаправьте вывод cmd в файл

3
ответ дан 30 November 2019 в 11:27
поделиться

Если вы просто хотите запустить исполняемый файл и дождаться результатов, решение Anurag, вероятно, будет лучшим. Мне нужно было отвечать на каждую строку вывода по мере ее поступления, и я обнаружил, что следующее работает:

1) Создайте объект с помощью метода записи (текста). Перенаправить на него stdout (sys.stdout = obj). В вашем методе записи обрабатывайте вывод по мере его поступления.

2) Запустите метод в отдельном потоке с чем-то вроде следующего кода:

    p = subprocess.Popen('Text/to/execute with-arg', stdout=subprocess.PIPE,
                        stderr=subprocess.PIPE, shell=False)
    while p.poll() is None:
        print p.stdout.readline().strip()

Поскольку вы перенаправили stdout, PIPE отправит вывод на ваш write метод построчно. Если вы не уверены, что получите разрывы строк, я думаю, read (amount) тоже работает.

3) Не забудьте перенаправить stdout обратно на значение по умолчанию: sys.stdout = __ sys.stdout __

0
ответ дан 30 November 2019 в 11:27
поделиться

Самый простой - os.system ("the.exe -a> thefile.txt") , но есть много других способов, например, с помощью подпроцесса модуль в стандартной библиотеке.

10
ответ дан 30 November 2019 в 11:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: