用于将Windows路径更改为unix路径的Python脚本

时间:2012-06-28 21:18:29

标签: python linux bash escaping

我想要一个脚本,我可以将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路径作为参数粘贴到脚本中。

6 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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('\\', '/'))

ntpathurlparseos.path模块可能有助于更有力地处理路径。

答案 2 :(得分: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脚本都将使用剪贴板中的任何参数执行。

答案 3 :(得分: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()

答案 4 :(得分:0)

为此而努力,导致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)

答案 5 :(得分:-1)

可能想尝试

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

作为将路径拆分为单独args的唯一原因是粘贴路径中的空格

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