Вот мой сценарий, который в основном рассчитывает количество строк, затем добавляет, а затем подсчитывает их снова, чтобы у вас были доказательства, что это сработало.
shortPath = "../file_to_be_appended"
short = open(shortPath, 'r')
## this counts how many line are originally in the file:
long_path = "../file_to_be_appended_to"
long = open(long_path, 'r')
for i,l in enumerate(long):
pass
print "%s has %i lines initially" %(long_path,i)
long.close()
long = open(long_path, 'a') ## now open long file to append
l = True ## will be a line
c = 0 ## count the number of lines you write
while l:
try:
l = short.next() ## when you run out of lines, this breaks and the except statement is run
c += 1
long.write(l)
except:
l = None
long.close()
print "Done!, wrote %s lines" %c
## finally, count how many lines are left.
long = open(long_path, 'r')
for i,l in enumerate(long):
pass
print "%s has %i lines after appending new lines" %(long_path, i)
long.close()
Вычисляет ли ожидаемый результат стандартную ошибку или стандартную версию?
работает ли это?
& $gpgLocation --import "key.txt" 2>&1 | out-file gpgout.txt
Ответ Стобора велик. Я добавляю к его ответу, потому что мне нужно было выполнить дополнительные действия, если у exe была ошибка.
Вы также можете сохранить вывод exe в переменную, подобную этой. Затем вы можете выполнять обработку ошибок на основе результата exe.
$out = $gpgLocation --import "key.txt" 2>&1
if($out -is [System.Management.Automation.ErrorRecord]) {
# email or some other action here
Send-MailMessage -to me@example.com -subject "Error in gpg " -body "Error:`n$out" -from error@example.com -smtpserver smtp.example.com
}
$out | out-file gpgout.txt
Вы также можете использовать Out-Host, как показано ниже.
& $gpgLocation --import "key.txt" | Out-Host
Кроме того, PowerShell просто не может захватить вывод некоторых программ, потому что они не записывают в stdout. Вы можете проверить это, запустив программу в PowerShell ISE (она находится в версии CTP 3 версии 2.0)
Если PowerShell ISE не может отобразить вывод в графической консоли, вы также не сможете его захватить и может потребоваться другой способ автоматизации программы.
Для автоматизации GPG.EXE вам необходимо использовать переключатель --batch, как в:
& $gpgLocation --import "key.txt" --batch | out-file gpgout.txt
Без этого переключателя GPG может ожидать ввода пользователем.