Пакет stopit
, найденный на pypi, кажется хорошо обрабатывает тайм-ауты.
Мне нравится декоратор @stopit.threading_timeoutable
, который добавляет параметр timeout
к украшенной функции, что делает то, что вы ожидать, он останавливает функцию.
Проверьте это на pypi: https://pypi.python.org/pypi/stopit
Presumably you are using printf
to output the columns in the first place. You can use extra modifiers in your format string to make sure things get aligned.
To give a more in depth example:
printf("%-30s %8s %8s\n", "Name", "Address", "Size");
for (i = 0; i < length; ++i) {
printf("%-30s %08x %8d\n", names[i], addresses[i], sizes[i]);
This would print three columns like this:
Name Address Size
foo 01234567 346
bar 9abcdef0 1024
something-with-a-longer-name 0000abcd 2048
Вот решение для awk: c_prog | awk '{printf ("% - 40s% - 40s \ n", $ 1, $ 2); } '
Если вы хотите выполнять обработку в Vim (а не исправлять генератор), установите плагин superb align и выполните следующее:
ggVG
\tsp
Первая команда преобразуется в gg
(перейти к началу файла), V
(перейти в режим визуальной линии), G
(перейти в конец файла). В сочетании он визуально выделяет весь файл. \ tsp
- это карта выравнивания, которая выравнивается по пробелу.
Если вы предпочитаете делать что-то в командной строке :
, вы можете использовать альтернативный разделитель (например, ] ###
) и используйте командную строку Align:
:%s/\s\+/###/g
:%Align ###
:%s/### //g
Он длиннее, но вы можете найти его более логичным / запоминающимся.
В сочетании он визуально выделяет весь файл. \ tsp
- это карта выравнивания, которая выравнивается по пробелу.
Если вы предпочитаете делать что-то в командной строке :
, вы можете использовать альтернативный разделитель (например, ] ###
) и используйте командную строку Align:
:%s/\s\+/###/g
:%Align ###
:%s/### //g
Он длиннее, но вы можете найти его более логичным / запоминающимся.
В сочетании он визуально выделяет весь файл. \ tsp
- это карта выравнивания, которая выравнивается по пробелу.
Если вы предпочитаете делать что-то в командной строке :
, вы можете использовать альтернативный разделитель (например, ] ###
) и используйте командную строку Align:
:%s/\s\+/###/g
:%Align ###
:%s/### //g
Он длиннее, но вы можете найти его более логичным / запоминающимся.
Я написал небольшую программу, которая решает эту проблему с помощью Perl. Это также работает для нескольких столбцов.
#!/usr/bin/perl
use strict;
use warnings;
my $sep = 2;
sub max {
my ($a,$b) = @_;
return $a > $b ? $a : $b;
}
my @rows;
my $cols;
my $max = 0;
while (<>) {
next if m/^\s*$/;
my (@cols) = split m'\s+';
for (@cols) {
$max = max($max, length);
}
$cols = @cols;
push @rows, \@cols;
}
for (@rows) {
my $str = join '', (('%-' . ($max+$sep) . 's') x $cols);
$str .= "\n";
printf $str, @$_;
}