Я нашел этот код в компоненте Microsoft.AspNet.Identity.Core, и он работает.
private static readonly TaskFactory _myTaskFactory = new
TaskFactory(CancellationToken.None, TaskCreationOptions.None,
TaskContinuationOptions.None, TaskScheduler.Default);
// Microsoft.AspNet.Identity.AsyncHelper
public static TResult RunSync<TResult>(Func<Task<TResult>> func)
{
CultureInfo cultureUi = CultureInfo.CurrentUICulture;
CultureInfo culture = CultureInfo.CurrentCulture;
return AsyncHelper._myTaskFactory.StartNew<Task<TResult>>(delegate
{
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = cultureUi;
return func();
}).Unwrap<TResult>().GetAwaiter().GetResult();
}
подпроцесс:
subprocess
модуль позволяет Вам порождать новые процессы, соединяться с их входными/выводами/ошибками каналами и получать их коды возврата.
http://docs.python.org/library/subprocess.html
Использование:
import subprocess
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
process.wait()
print process.returncode
os.exec*()
функции замена текущая программа с новой. Когда эта программа концы так делает Ваш процесс. Вы, вероятно, хотите os.system()
.
Можно использовать subprocess.Popen
. Существует несколько способов сделать это:
import subprocess
cmd = ['/run/myscript', '--arg', 'value']
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
for line in p.stdout:
print line
p.wait()
print p.returncode
Или, если Вы не заботитесь о том, что на самом деле делает внешняя программа:
cmd = ['/run/myscript', '--arg', 'value']
subprocess.Popen(cmd).wait()
используйте икру
import os
os.spawnlp(os.P_WAIT, 'cp', 'cp', 'index.html', '/dev/null')