Полагаю, desktop
на самом деле не является действительной командой, и вам действительно нужно
testing () {
cd ~/Desktop
python test.py "$1"
]
Лучшим вариантом может быть не принудительное создание всех проектов внутри папки рабочего стола, хотя .
testing () {
python ~/Desktop/test.py "$1"
}
позволит вам запустить скрипт в любом каталоге.
Еще лучше было бы придать скрипту надлежащий шебанг, отметить его исполняемым, назвать его testing
, и сохраните его в своем PATH
; тогда вам вообще не нужна функция оболочки.
Другой и ИМХО более удобный подход состоял бы в том, чтобы позволить пользователю указывать «личный» или «школьный» как часть командной строки вместо принудительного использования скрипт для использования интерактивного ввода. Потребность в интерактивном вводе-выводе усложняет использование сценария в качестве строительного блока для дальнейшей автоматизации и лишает пользователя возможности использовать функции истории и завершения оболочки.
Следующий рефакторинг жестких кодов очень грубый анализатор параметров и использует dict
для сопоставления типа проекта с указанным c именем папки.
#!/usr/bin/env python3
import sys
import os
paths = {
"school": "/Users/albert/Open/Microverse/"
"personal": "/Users/albert/Open/code/Projects/"
}
def makeproject(type, folder):
os.makedirs(os.path.join(path, folder))
def gettype():
while True:
userInput = input("What type of project would you like to create? Personal or School? ")
if userInput in paths:
return paths[userInput]
print("Not a valid option: {} -- try again".format(userInput))
def testing():
idx = 1
if sys.argv[idx] == "--school":
type = paths["school"]
idx = 1
elif sys.argv[idx] == "--personal":
type = paths["personal"
idx = 2
else:
type = gettype()
folderName = sys.argv[idx]
makeproject(type, folderName)
print(folderName)
if __name__ == "__main__":
testing()
Обратите внимание, что sys.argv
и значение, возвращаемое input
, уже являются строками; нет необходимости звонить str()
на них.