5

我想要一个脚本,我可以在其中粘贴 Windows 路径作为参数,然后脚本将路径转换为 ​​unix 路径并使用 nautilus 打开路径。

我希望能够按如下方式使用脚本:

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 路径作为参数粘贴到脚本中。

4

5 回答 5

2

除非您使用的是真正早期版本的 Windows:“/blah/whatever/”只适用于您的 OP。

于 2012-06-28T21:22:25.057 回答
0

xclip实际上我前段时间有过这样的事情,我制作了一个 bash 脚本来自动下载我复制到剪贴板的链接,在这里它被编辑以使用你的程序(如果你还没有它,你首先需要安装它):

#!/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 脚本将使用剪贴板中任何内容的参数执行。

于 2012-06-28T23:36:28.173 回答
0

为避免处理 shell 中的转义,您可以直接使用剪贴板:

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模块可能有助于更稳健地处理路径。

于 2012-06-28T22:01:32.957 回答
0
#!/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()
于 2017-04-28T18:51:33.440 回答
-1

可能想试试

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

因为它将路径拆分为单独的参数的唯一原因是粘贴路径中的空格

(例如:C:\Program Files 最终会成为两个 args ["c:\Program","Files"]

于 2012-06-28T21:36:13.107 回答