我在桌面上创建了一个名为"headfirstpython"的文件夹,我需要将当前的工作目录更改为该文件夹及其内部的子文件夹.我使用os.getcwd()获取当前文件夹,它给了我'C\Python32'.我使用os.chdir('../ headfirstpython/chapter3')来更改目录,但它告诉它无法找到路径
>>> import os
>>> os.getcwd()
'C:\\Python32'
>>> os.chdir('../headfirstpython/chapter 3')
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
os.chdir('../headfirstpython/chapter 3')
WindowsError: [Error 3] The system cannot find the path specified: '../headfirstpython/chapter 3'
>>> os.chdir('../headfirstpython/chapter3')
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
os.chdir('../headfirstpython/chapter3')
WindowsError: [Error 3] The system cannot find the path specified: '../headfirstpython/chapter3'
>>>
Run Code Online (Sandbox Code Playgroud) 如何使用我的python脚本将目录更改为目录?到目前为止,我发现我应该使用os.chdir和sys.argv[0].我确信有更好的方法来编写我自己的函数来解析argv [0].
众所周知,python __del__方法不应该用于清理重要的东西,因为不能保证调用此方法.另一种方法是使用上下文管理器,如几个线程中所述.
但我不太明白如何重写一个类来使用上下文管理器.详细说明,我有一个简单的(非工作)示例,其中包装器类打开并关闭设备,并且在任何情况下,类的实例都超出其范围(异常等)时将关闭设备.
第一个文件mydevice.py是打开和关闭设备的标准包装类:
class MyWrapper(object):
def __init__(self, device):
self.device = device
def open(self):
self.device.open()
def close(self):
self.device.close()
def __del__(self):
self.close()
Run Code Online (Sandbox Code Playgroud)
这个类由另一个类使用myclass.py:
import mydevice
class MyClass(object):
def __init__(self, device):
# calls open in mydevice
self.mydevice = mydevice.MyWrapper(device)
self.mydevice.open()
def processing(self, value):
if not value:
self.mydevice.close()
else:
something_else()
Run Code Online (Sandbox Code Playgroud)
我的问题:当我mydevice.py用with __enter__和__exit__方法实现上下文管理器时,如何处理这个类myclass.py?我需要做点什么
def __init__(self, device):
with mydevice.MyWrapper(device):
???
Run Code Online (Sandbox Code Playgroud)
但是如何处理呢?也许我忽略了一些重要的事情?或者我可以仅在函数内使用上下文管理器而不是作为类范围内的变量?
我试图将Python测试脚本模块自包含在目录中,以实现可伸缩性和可维护性.
我做了一些研究,但未能找到我正在寻找的答案.基本上,我想确定Python中是否有一个函数可以cd -在shell中执行类似的操作.
我通常希望避免键入完整的路径名,并拥有相对于指定环境的所有路径.
示例:我的主目录位于脚本所在的位置python-scripts,每个测试环境都有文件夹,每个测试环境都有demo一个屏幕截图文件夹demo-screenshots.
如果我想使用Python将屏幕截图保存到屏幕截图,在demo目录中工作时,我只需将其发送到以下目录:demo-screenshots,使用路径'/demo-screenshots/example.png'.问题是我不明白如何移回目录.
谢谢.
如何将终端命令添加到我的 Python 脚本中?我有一个包含更多图像/视频的图像/视频/文件夹的巨大文件夹,我想将它们组织在一个 HTML 文件 (FirstPage.html) 中。
该脚本首先列出目录中的所有文件:
def listFiles():
command = "ls"
output = Popen(command, stdout=PIPE) #This is the only way i found to run LS in terminal and get the output
x = str(output.stdout.read())
x = x[2:-3]
x += (" ")
x = re.sub(r"\\n", " ", x)
y = ""
finalLIST = list()
for o in x:
if o == " ":
finalLIST.append(str(y))
y = ""
else:
y += o
return finalLIST #returns a list with all files …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过python脚本更改终端目录。我已经看过这篇文章以及其他类似的文章,所以我对os.chdir有所了解,但是它并没有按照我想要的方式工作。os.chdir似乎更改了目录,但仅适用于python脚本。例如我有这段代码。
#! /usr/bin/env python
import os
os.chdir("/home/chekid/work2/")
print os.getcwd()
Run Code Online (Sandbox Code Playgroud)
不幸的是,运行后,我仍然位于python脚本的目录中(例如/ home / chekid),而不是我想进入的目录。请参见下文。
gandalf(pts/42):~> pwd
/home/chekid
gandalf(pts/42):~> ./changedirectory.py
/home/chekid/work2
gandalf(pts/42):~> pwd
/home/chekid
Run Code Online (Sandbox Code Playgroud)
对我应该怎么做有什么想法?
编辑:看起来我想做的事并不存在于'正常'python中。我确实找到了解决方法,尽管对我来说看起来并不那么优雅。
cd `./changedirectory.py`
Run Code Online (Sandbox Code Playgroud) 我是Python新手,我正在用它来做一些数据分析。
我的问题如下:我有一个包含许多子目录的目录,每个子目录都包含大量数据文件。
我已经编写了一个 Python 脚本,当在这些子目录之一中执行时,该脚本会执行数据分析并将其写入输出文件。该脚本包含一些我称为 using 的 shell 命令os.system(),因此我必须“位于”子目录之一才能使其工作。
我怎样才能编写一个自动执行以下操作的函数:
我想这可以通过某种方式来完成os.walk(),但我不太明白它是如何工作的。
PS 我知道这篇文章的存在,但它并没有解决我的问题。
PPS 也许我应该指出我的函数不将目录名称作为参数。其实这不需要争论。
我有一组有趣的要求,我正在尝试使用 Python 子进程模块和 docker-compose 来执行这些要求。整个设置可以在一个 docker-compose 中完成,但由于要求,这就是我想要设置的:
这是我的 docker-compose.py 的样子:
import subprocess
from subprocess import PIPE
import os
from datetime import datetime
class MyLog:
def my_log(self, message):
date_now = datetime.today().strftime('%d-%m-%Y %H:%M:%S')
print("{0} || {1}".format(date_now, message))
class DockercomposeRun:
log = MyLog()
def __init__(self):
dir_name, _ = os.path.split(os.path.abspath(__file__))
self.dirname = dir_name
def run_docker_compose(self, filename):
command_name = ["docker-compose", "-f", self.dirname + filename, "up"]
popen = subprocess.Popen(command_name, stdin=PIPE, stdout=PIPE, stderr=PIPE, universal_newlines=True)
return popen …Run Code Online (Sandbox Code Playgroud) 在如何在python中"cd"的问题中,接受的答案建议在类中包装os.chdir调用以使返回原始dir异常安全.这是推荐的代码:
class Chdir:
def __init__( self, newPath ):
self.savedPath = os.getcwd()
os.chdir(newPath)
def __del__( self ):
os.chdir( self.savedPath )
Run Code Online (Sandbox Code Playgroud)
有人可以详细说明这是如何使不安全的呼叫异常安全的吗?
我使用python脚本编译maven项目.
如果我使用
from subprocess import call
call("mvn clean && mvn compile")
Run Code Online (Sandbox Code Playgroud)
我无法定义我的maven项目的目录,maven尝试在Python脚本的目录中编译.
是否有任何标准方法来定义shell命令的执行目录?