Попробуйте строковый массив следующим образом:
<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;
}
}
Надеюсь, это поможет!
Вы можете перенаправить напрямую в файл с помощью подпроцесса.
import subprocess
with open('output.txt', 'w') as output_f:
p = subprocess.Popen('Text/to/execute with-arg',
stdout=output_f,
stderr=output_f)
Вы можете сделать что-то вроде этого например, чтобы прочитать вывод ls -l (или любой другой команды)
p = subprocess.Popen(["ls","-l"],stdout=subprocess.PIPE)
print p.stdout.read() # or put it in a file
, вы можете сделать то же самое для stderr / stdin
, но, как упомянул Алекс, если вы просто хотите, чтобы это было в файле, просто перенаправьте вывод cmd в файл
Если вы просто хотите запустить исполняемый файл и дождаться результатов, решение 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 __
Самый простой - os.system ("the.exe -a> thefile.txt")
, но есть много других способов, например, с помощью подпроцесса
модуль в стандартной библиотеке.