我正在构建一个可以自动执行系统管理员类型任务的python实用程序。部分工具涉及编写脚本,然后使用python界面中的powershell调用它们。这种代码的一个例子是这样的:Python - os.system调用中的相对路径
def remote_ps_session():
target = raw_input("Enter your target hostname: ")
print "Creating target.ps1 file to establish connection"
pstarget = open("pstarget.ps1", "w")
pstarget.write("$target = New-Pssession " + target + "\n")
pstarget.write("Enter-PSSession $target" + "\n")
pstarget.close()
print "File created. Initiating Connection to remote host..."
os.system("powershell -noexit -ExecutionPolicy Unrestricted " + "C:\path\to\my\file\pstarget.ps1")
我希望做两件事情,我认为可以用同样的方法来回答,我只是还没有搞清楚什么是最好的(进口VS变量VS初始设置定义等)
为了简单起见,我们会说的效用是在C:\实用程序和PowerShell函数是在一个文件夹的功能更深一层:C:\程序\功能
我想能够为1)脚本(被写入的文件)保存到的位置指定位置,然后2)在执行os.system调用时指向该位置。我希望这可以在大多数/任何现代Windows系统上运行。
我对可能性的想法是:
- 当脚本启动获取当前目录中,并且保存为一个变量,如果我需要回到一个目录中采取的变量,并在最后\删除一切,等等。看起来并不理想。
- 第一次启动系统位置的文件提示以输入变量。例如让它提示'你想要你的日志文件在哪里?' '你想要你的输出文件在哪里?' '你想在哪里生成脚本?'这些可以被称为变量,但如果它们移动了文件夹就会中断,并且可能不容易为用户“修复”。
- 我想有一种方法可以引用当前目录并导航到.. \ parallel文件夹到我正在执行的目录。 .... \ 2文件夹,但也似乎可能是混乱。我还没有看到管理这个标准/最佳实践是什么。
编辑:根据一些评论我认为__file__
可能是开始寻找的地方。我将深入研究这一些,但任何例子(例如:__file__/subfoldername
或任何使用会很酷。
'os.system'使用'cmd.exe'(除非你改变%comspec%),但你有powershell脚本。你为什么用这个而不是'subprocess'?你的例子有一个'''在其中的路径 - 确保你使用一个原始字符串,或者反斜杠,或者使用正斜杠作为目录分隔符。 – cdarke
@cdarke我只是最近才发现了关于子进程的问题,并且当我希望将输出返回到python会话中时,它已经合并了它。现在,我的大多数模块(可惜)都使用cmd.exe来为脚本调用powershell,如上所述。令人惊讶的是,上面的路径确实有效(不是确切的路径,而是那种格式)。但我会将它们切换为正斜杠。谢谢(你的)信息。 – Abraxas
'subprocess.check_call'适用于不需要捕获输出的情况。 –