我正在构建一个自动执行sysadmin类型任务的python实用程序。该工具的一部分涉及编写脚本,然后使用python接口中的powershell调用它们。这种代码的一个例子是:
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变量与初始设置定义等等)
为简单起见,我们说实用程序位于C:\ utility中,powershell函数位于更深层次的函数文件夹中:C:\ utility \ functions
我希望能够指定1)的位置,其中脚本(写入的文件)被保存到,然后2)在进行os.system调用时引用该位置。我希望它能够在大多数/任何现代Windows系统上运行。
我对可能性的看法是:
编辑:基于一些评论,我认为__file__
可能是开始寻找的地方。我将深入研究这个问题,但任何一些例子(例如:__file__/subfoldername
或其他任何用法都会很酷。
答案 0 :(得分:1)
Python有一个专门用于路径操作的库os.path,所以当你需要文件系统路径操作时,请查看它。
关于您的特定问题,请运行以下示例,以了解如何使用此lib中的函数:
import os
# These two should basicly be the same,
# but `realpath` resolves symlinks
this_file_absolute_path = os.path.abspath(__file__)
this_file_absolute_path1 = os.path.realpath(__file__)
print(this_file_absolute_path)
print(this_file_absolute_path1)
this_files_directory_absolute_path = os.path.dirname(this_file_absolute_path)
print(this_files_directory_absolute_path)
other_script_file_relative_path = "functions/some.ps"
print(other_script_file_relative_path)
other_script_file_absolute_path = os.path.join(this_files_directory_absolute_path,
other_script_file_relative_path)
print(other_script_file_absolute_path)
print("powershell -noexit -ExecutionPolicy Unrestricted %s" %
other_script_file_absolute_path)
你应该得到与此类似的输出:
/proj/test_folder/test.py
/home/user/projects/test_folder/test.py
/proj/test_folder
functions/some.ps
/proj/test_folder/functions/some.ps
powershell -noexit -ExecutionPolicy Unrestricted /proj/test_folder/functions/some.ps