2013-05-03 4 views
0

Я пишу скрипт, который эмулирует среду unix с помощью python (да, я знаю, это может звучать глупо).У меня есть файл python file

В основном я настраивал команды «pwd» и «ls» перед командой «cd». Теперь мне нужно, чтобы мой скрипт python перемещался по каталогам, перемещаясь. Мне было интересно, может ли кто-нибудь указать мне в правильном направлении? например, какие команды использовать, и т.д.

Примечание. Я бы предпочел, если бы мне пришлось использовать только встроенные модули.

Спасибо!

+12

Зачем ему нужно переместить скрипт? Вы можете изменить текущий рабочий каталог с помощью '' os.chdir() '] (http://docs.python.org/2/library/os.html#os.chdir). –

+3

Возможно, вас заинтересует модуль 'cmd', который позволяет вашей программе Python иметь интерактивное приглашение. В сочетании с перемещением рабочего каталога он может предоставить вам нужные функции. http://docs.python.org/2/library/cmd.html – austin

+0

Этот подход может работать не так хорошо, как вы надеетесь ... Если вы хотите создать приглашение unix, я думаю, вам нужно будет написать свой собственной оболочки. (возможно с указанным модулем 'cmd' austin) Команда' cd' является встроенной командой оболочки, которая заставляет оболочку изменять ее cwd. Если вы попробуете, чтобы ваш скрипт python скопировал себя о FS, вы могли бы легко переместиться за пределы вашего $ PATH. Что происходит, когда он падает? Вам придется искать FS для своего скрипта. и т. д. и т. д. – tMC

ответ

0

Я не уверен, что правильно вас понимаю, но если вы говорите о переходе через стандартную файловую систему unix и не копируете сценарий в разные места, вы можете просто просто обернуть три команды (pwd, ls, cd) как функции python, так же, как вы описывали.

Фактически, я сделал это как часть проекта wx_py; они не идеальные клоны, но они работают достаточно хорошо. Вот три функции:

import os 
import glob 

def pwd(): 
    print os.getcwd() 

def cd(path,usePrint=True): 
    os.chdir(os.path.expandvars(os.path.expanduser(path))) 
    if usePrint: 
     pwd() 

def ls(str='*',fullpath=False): 
    g=glob.glob(os.path.expandvars(os.path.expanduser(str))) 
    if fullpath: 
     for i in g: 
      print i 
    else: 
     for i in g: 
      print os.path.split(i)[1] 

Полный файл по адресу:

https://github.com/davidmashburn/wx_py/blob/master/wx_py/path.py

Я уверен, что другие, возможно, сделали лучшую работу, поэтому, пожалуйста, просто взять эти функции в качестве отправной точки ,

Смежные вопросы