Реальная проблема в вашем коде является то, что вы не используете format
правильно. На самом деле, как написано, он не будет даже скомпилировать:
os.system('/sw/bin/python2.7 program1.py -i Users/Steve/Desktop/{} -o Users/Steve/Desktop/{}'.format(inputFile),.format(outputFile))
Для первого аргумента system
, вы пытаетесь форматировать строку с двумя заполнителями и только кормить его одно значение. Затем для второго аргумента вы передаете .format(outputFile)
, что является ошибкой.
Вы можете исправить все, что написав:
os.system('/sw/bin/python2.7 program1.py -i Users/Steve/Desktop/{} -o Users/Steve/Desktop/{}'.format(inputFile, outputFile))
Однако, это плохой способ делать вещи. Обычно вы можете просто перезаписать свой код, чтобы импортировать функциональность в свой скрипт и вызвать его. Если единственная причина, по которой вы этого не делаете, заключается в том, чтобы заставить дочерний процесс, multiprocessing
по-прежнему обычно является лучшим способом сделать это.
Но иногда вам нужно что-то делать. В этом случае вы все равно не должны использовать os.system
. Во-первых, чтобы запустить новый скрипт с использованием того же интерпретатора, что и ваш скрипт, используйте sys.executable
, а не hardcoding. Во-вторых, как сообщит вам документ или помощь os.system
, вы должны почти всегда использовать функции в subprocess
. Итак:
subprocess.call([sys.executable, 'program1.py',
'-i', 'Users/Steve/Desktop/{}'.format(inputfile),
'-o', 'Users/Steve/Desktop/{}'.format(outputfile)])
Это берет на себя все виды проблем для вас, например, вы не должны выяснить, как процитировать имена файлов в случае, если они имеют пробелы, и это более безопасно и эффективно, чтобы не использовать если вам это не нужно.
Однако это еще вероятно, не будет работать для вас, если ваш текущий рабочий каталог не случается '/'
. Если вы хотите использовать абсолютный путь, вы должны запустить его с /
.
В то время как мы на нем, обычно лучше использовать функции пути вместо строковых функций для обработки путей, как в os.path.join('/Users/Steve/Desktop', inputfile)
.
Еще лучше, вы можете захотеть найти рабочий стол текущего пользователя вместо жесткого кодирования этого пути.Как рекомендует Apple, для этого требуется установить pyobjc
(который встроен в установку Apple Python, но, вероятно, не использует установку Fink, которую вы используете). Но тогда это так же просто, как:
desktop = AppKit.NSSearchPathForDirectoriesInDomains(AppKit.NSDesktopDirectory,
AppKit.NSUserDomainMask,
True)[0]
является «Пользователем/Стивом/Рабочий стол» опечатка? Вы имели в виду поставить это в корневой каталог? '/ Пользователи/...? – Erik