2012-06-28 190 views
3

我想要一個腳本,可以將一個Windows路徑粘貼爲參數,然後腳本將路徑轉換爲unix路徑並使用nautilus打開路徑。用於將windows路徑更改爲unix路徑的Python腳本

我希望能夠使用腳本如下:

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\ 

編輯:我想我要補充一點,問題是,沒有」的'\'參數作爲轉義字符處理。該解決方案不一定是python腳本,但我希望(在Linux中)能夠將一個windows路徑作爲參數粘貼到腳本中。

+0

字符串的來源是什麼?您可以創建一個簡單的GUI以避免轉義和/或調查腳本圖標/ applet解決方案上的拖放操作。 – jfs

+0

我在電子郵件中收到帶有窗口路徑的字符串。也許我必須爲此建立一個GUI應用程序,但是我認爲這應該是一個相當普遍的問題?!​​? – user1489737

+0

或直接從剪貼板中讀取:'xclip -o' – jfs

回答

1

除非您使用的是Windows的真正早期版本:「/ blah/whatever /」僅適用於您的OP。

+1

我認爲OP意味着它應該適用於粘貼路徑,我從文件資源管理器中猜測。 – C2H5OH

+0

窗口路徑格式使用\(在各種電子郵件中收到) 我只是想能夠作爲參數複製和粘貼到腳本。 – user1489737

-1

可能想嘗試

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

,因爲這將道路分成單獨的ARGS的唯一原因是在粘貼路徑空間

(如:C:\Program Files最終會因爲有兩個參數["c:\Program","Files"]

+6

不知道爲什麼你downvoted我... downvote沒有解釋不是很有幫助 –

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('\\', '/')) 

ntpathurlparse,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,導致posxpath,pathlib,絕對路徑,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) 
相關問題