В Mac OS вы можете использовать команду «open». Существует вызов Windows API, который делает что-то подобное, но я не помню его вслух.
Хорошо, команда «start» сделает это, так что это должно работать
Mac OS / X:
os.system("open "+filename)
Windows:
os.system("start "+filename)
Хорошо, ясно, что это глупое споры продолжаются, поэтому давайте просто посмотрим на это с помощью подпроцесса.
open
и start
являются средствами интерпретатора команд для Mac OS / X и Windows соответственно. Теперь предположим, что мы используем подпроцесс. Канонически вы бы использовали:
try:
retcode = subprocess.call("open " + filename, shell=True)
if retcode < 0:
print >>sys.stderr, "Child was terminated by signal", -retcode
else:
print >>sys.stderr, "Child returned", retcode
except OSError, e:
print >>sys.stderr, "Execution failed:", e
. Каковы преимущества этого? Теоретически это более безопасно - но на самом деле нам нужно выполнить командную строку так или иначе; в любой среде нам нужна среда и службы для интерпретации, получения путей и т. д. В любом случае мы не выполняем произвольный текст, поэтому он не имеет встроенного «но вы можете набрать 'filename ; rm -rf /'
», и если имя файла может быть повреждено, использование subprocess.call
не дает нам никакой защиты.
Это фактически не дает нам больше обнаружения ошибок, мы все еще в зависимости от retcode
в любом случае. Нам не нужно ждать дочернего процесса, так как мы имеем дело с выражением проблемы, начиная отдельный процесс.
«Но subprocess
является предпочтительным». Однако os.system()
не является устаревшим, и это самый простой инструмент для этой конкретной работы.
Заключение: использование os.system()
- это самый простой и простой способ сделать это, и, следовательно, правильный ответ.
$scope.showEmployee = function(){
var id = $routeParams.id;
$http.get('/employees/'+ id).then(function(response){
console.log(response);
// $scope.employee = response.data;
$scope.employee = response.data[0];
});
};