2012-06-28 2 views
3

Мне нужен сценарий, в котором я могу вставить путь к Windows в качестве аргумента, а затем скрипт преобразует путь в путь unix и открывает путь с помощью nautilus.Сценарий Python для изменения пути к пути к unix

Я хочу, чтобы иметь возможность использовать скрипт следующим образом:

mypythonscript.py \\thewindowspath\subpath\ 

Сценарий в настоящее время выглядит следующим образом:

import sys, os 

path = "nautilus smb:"+sys.argv[1] 

path = path.replace("\\","/") 

os.system(path) 

Я почти работает :) Проблема заключается в том, что я должен добавить 'вокруг аргумента ... например:

mypythonscript.py '\\thewindowspath\subpath\' 

Любой, кто знает, как я могу написать скрипт, который позволяет этот аргумент без «... то есть как это:

mypythonscript.py \\thewindowspath\subpath\ 

EDIT: Я думаю, что я должен добавить, что проблема заключается в том, что без» в \ в аргументе рассматривается как экранирующий символ , Решение не обязательно должно быть скриптом python, но я хочу (в Linux) иметь возможность просто вставить путь к Windows в качестве аргумента для скрипта.

+0

Что является источником для строк? Вы можете создать простой графический интерфейс, чтобы избежать экранирования и/или исследовать drag-n-drop в значке/апплетах сценария. – jfs

+0

Строки с оконной дорожкой, которые я получаю в письмах. Возможно, мне нужно создать графическое приложение для этого, как вы предлагаете ... Но я просто думаю, что это должна быть довольно распространенная проблема?!? – user1489737

+0

или просто прочитать непосредственно из буфера обмена: 'xclip -o' – jfs

ответ

1

Если вы используете действительно раннюю версию Windows: «/ blah/whatever /» просто работает для вашего OP.

+1

Я думаю, что OP означает, что он должен работать для вставленных путей, я думаю, из файла explorer. – C2H5OH

+0

Путь окон в формате с использованием \ (получен в разных письмах) Я просто хочу, чтобы иметь возможность копировать и вставлять в качестве аргумента скрипт. – user1489737

-1

может попробовать

my_argv_path = " ".join(sys.argv[1:]) 

единственной причиной была бы разделить путь на отдельные аргументы есть пробела в наклеенном пути

(например: C:\Program Files бы в конечном итоге, как два арг ["c:\Program","Files"])

+6

dunno почему вы downvoted меня ... downvote без пояснения isnt очень полезно –

0

Чтобы избежать проблем с побегами в оболочке, вы можете напрямую работать с буфером обмена:

import os 
try: 
    from Tkinter import Tk 
except ImportError: 
    from tkinter import Tk # py3k 

# get path from clipboard 
path = Tk().selection_get(selection='CLIPBOARD') 

# convert path and open it 
cmd = 'nautilus' 
os.execlp(cmd, cmd, 'smb:' + path.replace('\\', '/')) 

ntpath, urlparse, os.path модули могут помочь более эффективно обрабатывать пути.

0

На самом деле у меня было что-то вроде этого некоторое время назад, я создал скрипт bash для автоматической загрузки ссылок, которые я копирую в буфер обмена, здесь он отредактирован для использования вашей программы (сначала вам нужно установить xclip, если у вас еще нет она):

#!/bin/bash 

old="" 
new="" 

old="$(xclip -out -selection c)" 

while true 
do 

    new="$(xclip -out -selection c)" 

    if [ "$new" != "$old" ] 
    then 
     old="$new" 

     echo Found: $new 
     mypythonscript.py $new 

    fi 
    sleep 1 
done 

exit 0 

Теперь, когда вы копируете что-то новое в буфер обмена, ваш сценарий Python будет выполняться с аргументом, что находится в вашем буфере обмена.

+0

Спасибо! Это было даже лучше, чем я мог мечтать! :) – user1489737

-1
#!/usr/bin/python 
#! python3 
#! python2 
# -*- coding: utf-8 -*- 
"""win2ubu.py changes WINFILEPATH Printing UBUNTU_FILEPATH 
Author: Joe Dorocak aka Joe Codeswell (JoeCodeswell.com) 
Usage: win2ubu.py WINFILEPATH 
Example: win2ubu.py "C:\\1d\ProgressiveWebAppPjs\\Polymer2.0Pjs\\PolymerRedux\\zetc\\polymer-redux-polymer-2" 
    prints /mnt/c/1d/ProgressiveWebAppPjs/Polymer2.0Pjs/PolymerRedux/zetc/polymer-redux-polymer-2 
     N.B. spaceless path needs quotes in BASH on Windows but NOT in Windows DOS prompt! 
""" 
import sys,os 

def winPath2ubuPath(winpath): 
    # d,p = os.path.splitdrive(winpath) # NG only works on windows! 
    d,p = winpath.split(':') 
    ubupath = '/mnt/'+d.lower()+p.replace('\\','/') 
    print (ubupath) 
    return ubupath 

NUM_ARGS = 1 
def main(): 
    args = sys.argv[1:] 
    if len(args) != NUM_ARGS or "-h" in args or "--help" in args: 
     print (__doc__) 
     sys.exit(2) 
    winPath2ubuPath(args[0]) 

if __name__ == '__main__': 
    main() 
0

Goin hardway for this, cause posxpath, pathlib, absolutepath, os.path не работает для меня.

def format_path(any_path): 


    chars = [] 

    for i in range(len(any_path)): 
     char = any_path[i] 
     if char == '\\': 
      chars.append('/') 
     else: 
      chars.append(char) 
    return ''.join(chars) 
Смежные вопросы