我将我公司的一个脚本从csh转换为Python时遇到问题.csh脚本调用别名命令,但是当我通过os.system()调用相同的别名命令时,它不起作用.
所以,如果foo是别名命令:
CSH脚本(这个工作,执行foo):
foo <argument>
Run Code Online (Sandbox Code Playgroud)
Python(这不起作用,错误声明foo是一个未知的命令):
os.system("foo <argument>")
Run Code Online (Sandbox Code Playgroud)
我认为在执行python脚本时必然会发生某种上下文切换,这会导致Python无法访问shell中创建的别名.阅读文档之后,似乎有人os.system赞成使用subprocess,并且subprocess有一个shell参数可能能够帮助我...问题是我被困在使用Python 2.3,subprocess直到版本2.4才可用.
我有想法在python中复制别名.所以,例如,说foo是别名cp.
CSH:
alias foo cp
foo file1 file2
Run Code Online (Sandbox Code Playgroud)
蟒蛇:
os.system("alias foo cp")
os.system("foo file1 file2")
Run Code Online (Sandbox Code Playgroud)
没有骰子......这里也有错误:
sh: line 0: alias: foo: not found
sh: line 0: alias: cp: not found
sh: foo: command not found
Run Code Online (Sandbox Code Playgroud)
我最后的努力是使用几行代码foo并将它们放入Python调用的自己的CSH脚本中.但如果有办法让这项工作不依赖于此,我很想知道它.
提前致谢!
如何在Windows下的Python脚本中打开一个名为unicode的文件(带空格)?
文件名例如:Hello ????.xls
对于非unicode非间隔xls文件,os.system(filename)效果很好.
对于非unicode间隔xls文件,os.system('"'+filename+'"')效果很好.
但对于unicode空间xls文件...
两者os.system(filename)并subprocess.call(new_filename)给予:
UnicodeEncodeError:'ascii'编解码器无法编码位置12-13中的字符:序数不在范围内(128)
os.system(new_filename.encode('UTF-8')) 得到:
"Hello"不被识别为内部或外部命令,可操作程序或批处理文件.
并subprocess.call(new_filename.encode('UTF-8'))给出:
WindowsError:[错误2]系统找不到指定的文件
我试图了解如何使用os.system模块执行7zip命令.现在我不想让Popen或子进程复杂化.我已经安装了7zip并将7zip.exe复制到我的users文件夹中.我只想提取我的测试文件install.zip.但是,使用下面的代码会导致shell在退出之前短暂出现并且没有发生解压缩.请你告诉我为什么?
def main():
try:
os.system(r"C:\Users\Oulton\ 7z e C:\Users\Oulton\install.zip")
except:
time.sleep(3)
traceback.print_exc
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
非常感谢
我想输入一个电话号码,raw_input并在我的bash命令中使用此变量来发送消息.我不知道如何设置变量$ Phonenumber.没有RAW输入,它就像一个魅力.我使用Python 2.7.
import os
Phonenumber = raw_input("Number?)
os.system("yowsup-cli demos --login PHONE:PASSWORD= --send '$Phonenumber' 'MESSAGE'")
Run Code Online (Sandbox Code Playgroud) 我写了一个小代码:
import os
os.system('users')
os.system('w')
Run Code Online (Sandbox Code Playgroud)
这打印
ubuntu
09:27:25 up 9 days, 21:23, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
ubuntu pts/0 42.99.164.66 09:06 5.00s 0.10s 0.00s sh -c w
Run Code Online (Sandbox Code Playgroud)
但是当我尝试:
import os
from pyslack import SlackClient
user_name = os.system('users')
login_details = os.system('w')
print user_name
print login_details
Run Code Online (Sandbox Code Playgroud)
它有以下输出:
ubuntu
09:28:32 up 9 days, 21:24, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
ubuntu pts/0 42.99.164.66 09:06 …Run Code Online (Sandbox Code Playgroud) 所以我在Ubuntu 11.4和Python 2.7上运行看起来像这样的代码:
p_scan_command = "sudo nmap -sC -sV -PN -O 192.168.0.1/24"
time.sleep(1.5)
os.system(p_scan_command)
f = open('nmapscan1.log', 'r')
print f.read()
f.close()
Run Code Online (Sandbox Code Playgroud)
发生的事情是我最终没有结果,并且扫描没有运行,可能是因为它正在运行'sudo'.我想知道
我不知道为什么会这样做,当我试图修剪它时会吐出一个错误.
>>> print os.system('uptime')
21:05 up 9:40, 2 users, load averages: 0.69 0.76 0.82
0
>>> print os.system('uptime')[:-2]
21:07 up 9:42, 2 users, load averages: 0.75 0.74 0.80
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)
有谁知道如何阻止这种情况发生或如何在没有错误的情况下将其删除?谢谢!
我想使用 os.system 运行命令,但出现错误
c:/fe ' is not recognized as an internal or external command, operable program or batch file
Run Code Online (Sandbox Code Playgroud)
我使用的代码是
import os
os.system('"C:\\fe re\\python.exe" program "c:\\test now\\test.txt" http://site.to.explore')
Run Code Online (Sandbox Code Playgroud)
如果我只运行它会起作用:
import os
os.system('"C:\\fe re\\python.exe" program -h')
Run Code Online (Sandbox Code Playgroud)
或者,如果我在这样的 python 路径中没有空间
import os
os.system('C:\\fere\\python.exe program "c:\\test now\\test.txt" http://site.to.explore')
Run Code Online (Sandbox Code Playgroud)
但是如果我在 python 路径和 txt 路径中的命令中有两对双引号,我会得到一个错误......
如何找到包含 20170423 这样的日期的目录的路径?意思是,它可以是任何日期,但我想拥有该特定路径,直到我得到一个包含日期的文件夹。沿途可能有几个子目录包含该模式,但这是一种特殊情况,其中我需要提供更精确的信息,例如文件夹的内容以选择正确的文件夹。如果您想要特殊情况,请尝试一下,但对于我知道一路上只有一个文件夹包含该模式的情况,我开始的方式是:
directPaths_list = [f.path for f in os.scandir( start ) if f.is_dir() ]
Run Code Online (Sandbox Code Playgroud)
这为我提供了从开始文件夹到结束文件夹的所有路径。现在,我想返回其中包含日期模式的路径,特别是其中一个,可以说谁的 int(folder_name) 是 < datetime.datetime.today()
我可以想出一个粗略的解决方案,但是有人拥有非常好的技能,可以想出简洁优雅的解决方案,所以就这样了..有什么想法吗?谢谢!
例如,对于路径 start= C:/ 这将返回 C:\Users\abc\def\ghi\20170412
我在想这样的事情可以工作:
[f.path for f in os.scandir('C:\\Users\\abc\\def\\ghi\\') if f.is_dir() and str(f.path).endswith(str(2),-2,-1) ]
Run Code Online (Sandbox Code Playgroud) 例如,我有一个命令 commandA 并希望在执行 commandA 后获取退出代码。CommandA 预计会失败,所以我们应该得到的退出代码是 1。
如果我在终端中输入 command 作为commandA;echo $?,屏幕上会显示 1 。然而,当我用 python 做的时候,事情出错了。
我试图用os.system(commandA)or调用 commandA subprocess.call(commandA.split()),然后调用os.popen('echo $?').read(),结果为 0。
os.popen('commandA;echo $?').read() 给了我一个正确的结果,但是 commandA 的过程没有显示在屏幕上,这是我不希望它发生的。
os.system ×10
python ×10
subprocess ×3
python-2.7 ×2
windows ×2
7zip ×1
alias ×1
bash ×1
csh ×1
macos ×1
path ×1
scandir ×1
subdirectory ×1
ubuntu ×1
ubuntu-11.04 ×1
unicode ×1
variables ×1